`
yong3773
  • 浏览: 32575 次
社区版块
存档分类
最新评论

测试方法中循环读取同一参数变量

 
阅读更多

基于数据驱动的自动化框架,在我们编写测试代码时,测试方法一定要做到复用性。

 

实际工作中我们发现,不同的入参对应不同的预期结果,一般情况下,我们都会写多个测试方法应对多次入参,这样是很耗时耗力的。

 

仔细想想:测试方法中的处理逻辑是不变的,变的是入参和预期的结果。所以如果能做到一个测试方法中,循环多次读取同一个变量的入参值,就能做的测试方法的复用性,提高效率。

 

举个例子:测试方法如下,有2个入参,需要测试不同入参情况下测试方法的处理情况。我们总不能一种入参就写一个测试方法吧?那样的话,testB()、testC()....没完没了了。

 

@Test
public void testA() {
String userName;
String password;

.
.
.
//测试方法实现逻辑代码
.
.
.

assertEquals(actual,expected)

}

 

 

入参userName、password变量取自数据库,如果需要测试2次不同的入参,第一次userName=demo1,password=111111,第二次userName=demo2,password=222222,那么我们如何在数据库中存储变量,又如何在程序中处理呢?我这边有2中思路。

 

思路1:

数据库中存储形式如下

param value
userName demo1
password 111111
userName demo2
password 222222

 

参数读取程序通过limit,顺序读取每次不同的值

 

	if(indexRow==totalRow){
	con.sql="SELECT VALUE FROM table WHERE  PARAM='"+paramName+"' limit "+startIndex+","+totalRow+";";

		}else{
			con.sql="SELECT VALUE FROM table WHERE  PARAM='"+paramName+"'  limit "+startIndex+","+endIndex+";";

		}	

 


//totalRow是同一个次数变量出现的次数,比如userName出现2次,那么totalRow=2

//startIndex是数据库开始读取的坐标

//endIndex是数据库结束读取的坐标

//indexRow是目标读取的坐标

//他们的关系是startIndex=indexRow-1;endIndex=totalRow-indexRow; 

 

测试程序通过for循环,加入循环次数

	for(int i=1;i<=totalRow;i++){
				
				String userName=DBUtil.query( "userName",i);
		    	String password=DBUtil.query( "password",i);
				}

 

这种思路的优点就是数据库显示明了(userName还是userName),当然缺点也很明显,难以区分哪个userName是第一次调用,哪个是第二次调用。

 

思路2:

数据库中存储形式如下

param value
userName1 demo1
password1 111111
userName2 demo2
password2 222222

 

参数读取程序通过正常一条sql读取各自的值

con.sql="SELECT VALUE FROM table WHERE PARAM='"+paramName+"';";

 

所有的定位循环操作放在测试程序中

	for(int i=1;i<=totalRow;i++){
				
				String userName=DBUtil.query("userName"+i);
		    	String password=DBUtil.query("password"+i);
				}

 

思路2的优点很明显,程序处理简单很多,也利于识别哪次调用哪个参数。缺点就是数据库改变了变量的名称。

 

上面2中思路,在我的自动化接口测试中都有尝试,最终选择了第二种思路。一个测试方法,只关心输入数据(不限次数),无限复用,这也是数据驱动一种体现吧。

 

供大家参考。转载请注明出处,谢谢。

 

0
1
分享到:
评论

相关推荐

    Linux高级bash编程

    文件信息:对包含在变量中的文件列表进行操作 10-4. 在for循环中操作文件 10-5. 在for循环中省略[list] 10-6. 使用命令替换来产生for循环的[list] 10-7. 对于二进制文件的一个grep替换 10-8. 列出系统上的所有用户 ...

    Advanced Bash-Scripting Guide <>

    文件信息:对包含在变量中的文件列表进行操作 10-4. 在for 循环中操作文件 10-5. 在for 循环中省略[list] 10-6. 使用命令替换来产生for 循环的[list] 10-7. 对于二进制文件的一个grep 替换 10-8. 列出系统上的所有...

    Oracle9i的init.ora参数中文说明

    请注意所有用户均可读取或写入 UTL_FILE_DIR 参数中指定的所有文件。 值范围: 任何有效的目录路径。 默认值: 无 plsql_v2_compatibility: 说明: 设置 PL/SQL 兼容级。如果设置为 FALSE, 将执行 PL/SQL V3 行为, ...

    Python核心编程第二版(ok)

     3.4.2 在主程序中书写测试代码   3.5 内存管理   3.5.1 变量定义   3.5.2 动态类型   3.5.3 内存分配   3.5.4 引用计数   3.5.5 垃圾收集   3.6 第一个Python程序   3.7 相关模块和开发...

    华为编程开发规范与案例

    1、新老代码中同一全局变量不一致 第58页 【案例5.1.1】 第58页 六、可测试性代码问题 第59页 1、调试信息/打印信息的正确性 第59页 【案例6.1.1】 第59页 一、逻辑类代码问题 1、变量/指针在使用前就必须初始...

    易语言家庭影音播放器源码

    参数 操作类型, 整数型 .如果真 (操作类型 = #双击) .如果 (_启动窗口.可视 = 真) 位置 = 2 _启动窗口.可视 = 假 _启动窗口.总在最前 = 假 .否则 位置 = 0 _启动窗口.可视 = 真 ' 本源码来自易语言...

    WinRAR_4.0.exe

    在一个 UNIX 环境变量中,你需要将通配符置于引号中,避免被外壳扩展。例如, 这个命令将从当前路径中的 RAR 压缩文件解压所有的 *.asm 文件: rar e '*.rar' '*.asm' 命令可以是下列中的任何一个: a 添加...

    java 面试题 总结

    如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 15、error和exception有什么区别? error 表示恢复不是...

    超级有影响力霸气的Java面试题大全文档

    如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 18、error和exception有什么区别?  error 表示恢复...

    java经典面试2010集锦100题(不看你后悔)

    C) 子类继承父类,如果父类中只有一个构造方法并且有参数,那么在子类的构造方法中必须先用super调用父类构造方法并传参。 D) 以上说法都不正确。 题目11:d 程序如下: class Test { private int day; public int...

    c#多线程抓取网页内容

    在《爬虫/蜘蛛程序的制作(C#语言)》一文中,已经介绍了爬虫程序实现的基本方法,可以说,已经实现了爬虫的功能。只是它存在一个效率问题,下载速度可能很慢。这是两方面的原因造成的: 1. 分析和下载不能同步进行...

    经典全面的SQL语句大全

     随机读取若干条记录,测试过 Access语法:SELECT top 10 * From 表名 ORDER BY Rnd(id) Sql server:select top n * from 表名 order by newid() mysql select * From 表名 Order By rand() Limit n  Access左连接...

    mysql数据库my.cnf配置文件

    # 对于同一主机,如果有超出该参数值个数的中断错误连接,则该主机将被禁止连接。如需对该主机进行解禁,执行:FLUSH HOST。 open_files_limit = 65535 # MySQL打开的文件描述符限制,默认最小1024;当open_files_...

    《程序天下:JavaScript实例自学手册》光盘源码

    14.13 获取JavaScript函数中的所有参数 14.14 奇偶数的判断 14.15 在JavaScript运行VBScript函数 14.16 购物篮中常用的计算总价效果 14.17 同一用户的来访统计 14.18 十六进制转换为十进制 14.19 将URL转化为16进制 ...

    程序天下:JavaScript实例自学手册

    14.13 获取JavaScript函数中的所有参数 14.14 奇偶数的判断 14.15 在JavaScript运行VBScript函数 14.16 购物篮中常用的计算总价效果 14.17 同一用户的来访统计 14.18 十六进制转换为十进制 14.19 将URL转化为16进制 ...

    Access+2000中文版高级编程

    8.5.5 在VBA中实现参数查询 211 8.6 用查询产生报表与窗体 212 8.7 用查询解决问题 213 8.7.1 分组以获得百分比 213 8.7.2 查找并删除重复的记录 215 8.7.3 用组的嵌套彻底解决问题 217 8.7.4 区分新旧...

    Access 2000中文版高级编程(part1)

    8.5.5 在VBA中实现参数查询 211 8.6 用查询产生报表与窗体 212 8.7 用查询解决问题 213 8.7.1 分组以获得百分比 213 8.7.2 查找并删除重复的记录 215 8.7.3 用组的嵌套彻底解决问题 217 8.7.4 区分新旧记录 ...

    VB课程设计俄罗斯方块

    则消除这行的方块,并且使上面的方块自由下落,其中,方块向下的速度是有时钟控件控制的,在游戏中,用户也可以使用向下键加快下落速度,定义一个变量,对消除的函数进行记录,最后就可以得出用户的分数,用if 语句...

    你必须知道的495个C语言问题

    3.18 需要根据条件把一个复杂的表达式赋给两个变量中的一个。可以用下面这样的代码吗?((condition)?a:b)=complicated_expression; 3.19 我有些代码包含这样的表达式。a?b=c:d有些编译器可以接受,有些却不能。为...

Global site tag (gtag.js) - Google Analytics