基于数据驱动的自动化框架,在我们编写测试代码时,测试方法一定要做到复用性。
实际工作中我们发现,不同的入参对应不同的预期结果,一般情况下,我们都会写多个测试方法应对多次入参,这样是很耗时耗力的。
仔细想想:测试方法中的处理逻辑是不变的,变的是入参和预期的结果。所以如果能做到一个测试方法中,循环多次读取同一个变量的入参值,就能做的测试方法的复用性,提高效率。
举个例子:测试方法如下,有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中思路,在我的自动化接口测试中都有尝试,最终选择了第二种思路。一个测试方法,只关心输入数据(不限次数),无限复用,这也是数据驱动一种体现吧。
供大家参考。转载请注明出处,谢谢。
相关推荐
在MATLAB中,读取同一路径下的多个TXT或MAT文件是一项常见的任务,特别是在数据分析和处理项目中。MATLAB提供了一系列的内置函数,使得这个过程变得简单而高效。下面将详细介绍如何利用MATLAB来完成这个任务。 首先...
在转换或作业中,可以使用`${参数名}`来引用这些参数,使得同一作业或转换在不同环境下使用不同的配置。 2. **多参数传递**: 多参数传递意味着在执行Kettle作业或转换时,需要传递多个参数值。这可能涉及到多个...
在处理HTTP分页接口时,我们可以设置全局变量来存储页码、每页大小等参数,然后在循环中动态更新这些变量以获取下一页数据。通过这种方式,我们可以灵活地控制HTTP请求,并确保正确地遍历所有页面。 调用HTTP分页...
当使用中断方式处理串口接收任务而非DMA时,由于对缓冲区大小变量(size)的操作不是原子性的,即在同一时间可能发生多个任务对该变量进行读取和修改,这可能导致以下情况: 1. **中断中的++操作**:在串口接收中断...
单进程共享变量主要用于在同一个VI的不同循环之间或同一应用实例中的不同VI之间传递数据。这种类型的共享变量类似于全局变量,但具有更高的灵活性,因为它可以很容易地转换为网络发布的共享变量,从而实现跨网络的...
在变量入门的20个关卡中,初学者将会逐步学习并实践这些基本操作,从而熟练掌握变量的使用方法。 ### 二、查看循环规律 #### 1. 循环的概念 循环是编程中的一个重要概念,它允许代码块被重复执行多次。这可以极大...
它允许测试人员将不同的输入数据存储在一个表格中,并通过循环结构来逐个读取这些数据,从而实现对同一测试脚本的不同运行场景的覆盖。这种方式特别适用于需要多次执行同一测试脚本但每次输入数据不同的场景。 ####...
4. **设置测试循环**:使用`For Each`循环或其他循环结构,遍历数据源中的每一行数据。 5. **运行测试**:启动测试,QTP会根据数据源中的数据逐个执行测试。 **QTP参数化的实例应用** 例如,在一个登录功能的测试中...
1. **用参数替换Vuser脚本的常量值**:将脚本中的固定值替换为可以从外部数据源读取的变量。 2. **为参数设置属性和数据源**:定义参数的数据来源以及如何在测试过程中使用这些数据。 #### 四、参数的选择与分配 -...
`uniform`变量是着色器中一个重要的概念,它们是全局变量,可以在所有碎片或顶点着色器实例间共享,通常用来传递从CPU到GPU的数据,如模型变换矩阵、光照参数等。 标题提到的问题——"shader中uniform变量的if或for...
了解VBA的基础语法,如变量声明、条件语句、循环结构以及函数调用,是实现这个功能的前提。 2. **Excel对象模型**:VBA提供了对Excel应用程对象模型的访问,这允许我们操作工作簿、工作表、单元格等元素。理解如何...
`for /F`循环在批处理中常用来解析文件内容,它可以逐行读取文件并将每一行作为一个变量处理。例如: ```batch for /F "delims=" %%i in (filename.txt) do ( rem 在这里处理每一行 echo 上一行是: %lastLine%, ...
- **输出依赖(Output Dependency)**:写-写依赖,同一变量在不同迭代中被多次写入。这是并行化的主要挑战。 - **循环内依赖(Intra-Iteration Dependency)**:在同一迭代内部的依赖,可能会影响ILP,但某些情况...
- C++中同一作用域内不允许重复定义变量,否则会导致编译错误。 - 不赋值的变量可能含有随机值,使用前务必赋值,以避免程序出错。 - 变量的作用域是有限的,通常在大括号内的代码块中,变量只在其定义的区域内...
- 使用`web_submit_data()`函数中的`ITEMDATA`进行参数化处理,同时可考虑对同一函数内的其他相同变量也进行替换。 **3. 脚本调试** - 遵循从单用户单循环测试到多用户多循环测试的原则逐步调试脚本。 - 对于...
11. 同一包子类访问父类保护成员:同一包的子类可以访问父类的保护级成员变量。答案是A。 以上是对Java测试试题的详细解释,涵盖了Java基础语法、多线程、事件处理、异常处理、类和对象、访问修饰符等相关知识点。...
本文将详细讲解基于双向门控循环单元(BiGRU)的多变量回归预测在MATLAB中的实现,并结合评价指标R2、MAE、MSE、RMSE和MAPE进行分析。MATLAB是一款强大的数学计算软件,它提供了丰富的工具箱,包括神经网络功能,...
此外,如果多个地方都需要用到同一变量的地址,可以考虑将地址保存在一个全局变量中,而不是在每次需要时都重新获取。 其次,理解内存管理也是优化的重要环节。在易语言中,变量的生命周期和内存分配是自动进行的,...
在实际测试中,为了模拟真实用户的多样化行为,通常需要使用参数化技术,即将脚本中的静态数据替换为动态参数,使得每个虚拟用户的行为有所不同。本文主要探讨LoadRunner中的参数化策略及其流程。 **参数化流程** ...