《精通自动化测试框架设计》—第2章 2.3节测试数据交互基本方法

简介: 本节将介绍几种常用的数据交互的方法,并就以上这些数据类型,根据各自的来源与使用场景,选取较为合适的处理方法。在实践中,读者可以根据适合自身框架的特点有针对性地加以改造。

本节书摘来自异步社区《精通自动化测试框架设计》一书中的第2章,第2.3节测试数据交互基本方法,作者陈冬严 , 邵杰明 , 王东刚 , 蒋涛,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.3 测试数据交互基本方法
本节将介绍几种常用的数据交互的方法,并就以上这些数据类型,根据各自的来源与使用场景,选取较为合适的处理方法。在实践中,读者可以根据适合自身框架的特点有针对性地加以改造。

在开始之前,首先介绍下在国内领先的问卷调查网站问卷星上做的一个软件自动化测试问卷调查(http://www.sojump.com/jq/3569220.aspx)中一道有关测试数据题目的调查结果,如图2.2所示。

从结果上看,Excel占据着最大的份额,可见MS Office系列的成功;而直接内嵌以及XML紧随其后,有着20%上下的占比。居中的则是属性文件交互以及CSV交互这样相对更专业的方式。数据库交互则以 3%不到的份额差点垫底,估计在日益追求轻量化的今天,数据库这种“重”的方式也逐渐被大家所摒弃。

当然,上述数据只是该次调查的结果,供大家在方案选型时做参考。最关键的是读者结合自身项目的实际情况,选择适合的数据交互方式。


f8a51891a4596402ceb6178fcbb3931b62f976f1

2.3.1 使用Java的系统属性
Java在包java.lang.System中提供了一些标准的系统属性。这些信息可以用于确定用例执行方式,或者记录运行环境。读者可以通过运行下面这个例子来了解这些属性。
importjava.util.Iterator;
importjava.util.Properties;
public classSysProp {
   public static void main(String args[]) { 
     Properties props=System.getProperties(); 
     Iteratoriter=props.keySet().iterator(); 
     while(iter.hasNext()) { 
       String key=(String)iter.next(); 
       System.out.println(key+" = "+ props.get(key)); 
     }
   }
}

如果需要获得某一特定的系统属性,可以通过方法String java.lang.System.getProperty(String key)来完成。譬如下面这段代码获得了用户的根目录,并赋值给变量USER_HOME。

public static final String USER__HOME= System.getProperty("user.home");
类似地,System.setProperty(key, value)和System.setProperties(props)可以用来设定系统属性。譬如,下面这个语句就把属性值“firefox”赋给自定义的系统属性BROWSER_TYPE。

System.setProperty("BROWSER___TYPE", "firefox");
介绍完了在代码中的设置与获取,再介绍下如何在Java系统让属性信息可以在命令行、IDE环境或者Ant中将少量的变量数据传递给JVM。

命令行中最简单的就是使用标准的命令行选项"-Dpropertyname=value",如:

Java -DBROWSER_TYPE=firefox class
在Ant中可以使用子单元直接传递。

< syspropertykey="browser.type" value="firefox"/ >
而在像Eclipse 这样的IDE,可以直接在运行配置中设定,如图2.3所示。


d2f3a1d4ae750754d900a6f1bc6797d9b556bd02

读者如果感兴趣,可以通过以上这3种方式来运行下面这段代码。
import staticorg.junit.Assert.*;
importorg.junit.Test;
public classSysProp {
private String SELENIUM___PROPERTIES=System.getProperty("browser.type"); 
   @Test
   publicvoid Test() { 
     assertEquals("firefox",SELENIUM___PROPERTIES);
     }
   }

它们运行后,应该能获得一致的运行结果。

2.3.2使用操作系统的环境变量
环境变量,简单来讲,对于Windows操作系统,就是在系统属性→高级→环境变量中设置的变量。对于一些全局的测试数据,如数据库连接参数、第三方类库文件位置等,可以考虑通过环境变量来传递。

读者可以运行下面这段程序来了解System.getenv()的用法,并和前一小节中的输出进行比较,了解系统属性参数和环境变量的具体区别。

importjava.util.Iterator;
importjava.util.Map;
public classEnvProp {
   public static void main(String args[]) { 
     Map< String, String >envMap=System.getenv(); 
     Iterator iter=envMap.keySet().iterator(); 
     while(iter.hasNext()) { 
       String key=(String)iter.next(); 
       System.out.println(key+" = "+ envMap.get(key)); 
       } 
     }
   }

2.3.3 使用属性文件
前面介绍的两种方式,一般适合于框架中所使用的属性为个位数的情况。随着测试复杂性的增强,测试用例数量也呈几何级数增长。这时候,你可能需要一种更灵活、更有效的数据存储和交换的方式,那就是Java的属性文件。操作属性文件的方法其实和操作系统属性很类似,都可以使用包java.util.Properties中提供的类。细心的读者可能已经发现,前面两种方法虽然数据来源不一样,但其实都是在利用同一种数据格式:

Key=value

属性文件中的属性值也是采用这种方式保存数据。操作属性文件,因为牵涉到文件,所以首先需要为Properties类提供一个读写流。Properties用于读写属性文件的方法分别是:

//读取属性文件流的方法 
public voidload(InputStream inStream) throwsIOException {} 
//写属性文件流的方法 
public void store(OutputStream out, String comments) throwsIOException {}

这里只是列举了一些简单的读取方式,供初学的读者进行了解。在第 3 章中将介绍Solvent框架的整体解决方案如何综合使用各类型数据交互方法满足各种测试框架的需求。

相关文章
|
16天前
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
65 8
|
20天前
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
34 4
|
22天前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
|
24天前
|
测试技术 持续交付
探索软件测试中的自动化测试策略
随着软件开发周期的加速和市场需求的不断增长,传统的手动软件测试方法已难以满足现代软件开发的高效性和准确性要求。本文旨在探讨自动化测试在软件测试中的重要性、实施策略及其对提高软件质量的影响。通过分析自动化测试的优势与挑战,以及提供实用的自动化测试工具和框架选择指南,旨在帮助读者理解并应用自动化测试以提升软件开发效率和产品质量。
|
22天前
|
机器学习/深度学习 人工智能 监控
软件测试中的自动化测试策略与最佳实践##
在当今快速发展的软件行业中,自动化测试已成为确保软件质量和加速产品上市的关键工具。本文将探讨自动化测试的重要性,分析不同类型的自动化测试工具和框架,并深入讨论实施自动化测试的最佳实践。通过案例研究和数据分析,我们将揭示如何有效整合自动化测试到软件开发生命周期中,以及它如何帮助团队提高测试效率和覆盖率。 ##
40 1
|
21天前
|
Java 测试技术 API
探索软件测试中的自动化测试框架
本文深入探讨了自动化测试在软件开发中的重要性,并详细介绍了几种流行的自动化测试框架。通过比较它们的优缺点和适用场景,旨在为读者提供选择合适自动化测试工具的参考依据。
|
23天前
|
前端开发 JavaScript 测试技术
前端自动化测试
前端自动化测试是通过使用工具和脚本自动执行测试用例的过程,旨在提高测试效率、减少人为错误,并确保Web应用的功能在不同环境和设备上的一致性与稳定性。
|
22天前
|
数据管理 测试技术 持续交付
软件测试中的自动化测试策略与最佳实践
在当今快速迭代的软件开发环境中,自动化测试已成为确保软件质量和加速产品上市的关键手段。本文旨在探讨软件测试中的自动化测试策略,包括选择合适的自动化测试工具、构建有效的自动化测试框架以及实施持续集成和持续部署(CI/CD)。通过分析自动化测试的最佳实践,本文为软件开发团队提供了一系列实用的指南,以优化测试流程、提高测试效率并减少人为错误。
55 4
|
22天前
|
监控 测试技术 定位技术
探索软件测试中的自动化测试框架选择与实施###
本文不概述传统意义上的摘要内容,而是直接以一段对话形式引入,旨在激发读者兴趣。想象一下,你是一名勇敢的探险家,面前摆满了各式各样的自动化测试工具地图,每张地图都指向未知的宝藏——高效、精准的软件测试领域。我们将一起踏上这段旅程,探讨如何根据项目特性选择合适的自动化测试框架,并分享实施过程中的关键步骤与避坑指南。 ###
31 4
|
21天前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!