目录
参数的使用方法
以下是几种常见的实现APP自动化测试参数化的方法
使用测试框架内置功能
从文件读取数据
数据库查询
环境变量或配置文件
命令行参数
第三方库或工具
参数化是自动化测试的一种常用技巧,测试人员可以将测试代码中的某些变量的输入使用参数来代替。我们以测试百度搜索功能为例,每次测试搜索功能,都要测试搜索中输入的不同的搜索内容,在进行这个测试过程中,除了搜索框中的数据在变化,测的步骤也是重复的,这时就可以使用参数化的方式来解决测试数据变化,测试步骤不的问题。参数化就是把测试需要用到的参数写到数据集合里,让测试程序自动从这个台里面取数据,同时每条数据都生成一个对应的测试用例。
参数的使用方法
我们使用APPium测试框架的编写测试用例时,通常会结合单元测试框架一起使用。使用测试框架参数化的机制,可以减少代码重复。参数化的使用方法是,在测试代码前添加装饰器完成测试数据的传输。
python代码
@pytest.mark.parametrize("argvnames",argvalues)
Java代码
@ParameterizedTest
@ValueSource(strings =argvalues)
不同编程语言提供的单元测试框架支持的参数传递方式也不一样,但都会在测试用例上添加一个装饰器用以帮助参数化的实现,以 Python 语言提供的单元测试框架 pytest为例,pytest自带了参数化功能,在测试用例上添加参数化需要用到装饰器@pytest.mnparametize(),同时需要传入两个参数“argvnames”与“argvalues”,第一个参数需要个或者多个变量来接收列表中的每组数据,第二个参数传递存储数据的列表。测试用例需要使用同名的字符串接收测试数据(与“argvnames”里面的名字一致),且列表有多少个元素就会生成并执行多个测试用例。
下面示例使用参数化定义3组数据,每组数据都存放在一个数据序列中,分别将数据序列传入(test_input,expected)参数中。
python代码
# content of test expectation.py
import pytest
@pytest.mark,parametrize("test_input,expected",[("3+5",8),("2+4",6),("6*9",42)])
def test_eval(test_input,expected):
assert eval(test_input == expected
java代码
public class BookParamTest {
@ParameterizedTest
@MethodSource("intProvider")
void testwithExplicitLocalMethodsource(int first,int second,int sum){(assertEquals(first+second,sum);}
static Stream<Arguments> intProvider(){
return Stream.of(
arguments(358),
arguments(356),
arguments(6942)
);
}
}
参数化指的是将测试用例中的某些固定值替换为变量,然后通过外部数据源(如CSV文件、Excel表格、数据库等)来提供这些变量的值。这样做可以使得同一个测试用例能够使用不同的输入数据运行多次,从而提高测试覆盖率和灵活性。
以下是几种常见的实现APP自动化测试参数化的方法
使用测试框架内置功能
如果你使用的测试框架(如Appium、Espresso、XCUITest等)支持参数化,可以直接利用它们提供的特性。例如,在JUnit中你可以使用@ParameterizedTest注解配合@CsvSource或@MethodSource等方式来实现参数化。
从文件读取数据
你可以将测试数据存储在一个外部文件中,比如CSV、JSON或XML格式,并在测试执行时读取这个文件的内容。对于每组数据,创建一个新的测试实例并执行。
数据库查询
对于更复杂的数据需求,可以从数据库中获取测试数据。这通常涉及到编写SQL查询语句来提取所需的数据行,然后将其作为测试用例的输入。
环境变量或配置文件
测试参数也可以被设置为环境变量或者放在配置文件中(如.properties, .yml)。这种方式适合那些不太频繁变化但又对所有测试用例都重要的参数,比如API endpoint URL。
命令行参数
某些情况下,你可能希望直接从命令行传递参数给你的测试脚本。大多数测试框架都支持这种方式,允许你在启动测试时指定额外的参数。
第三方库或工具
还有一些专门用于管理测试数据的第三方库或工具,可以帮助简化参数化的流程。例如,Data Provider是Selenium WebDriver的一个概念,也被移植到了一些移动测试框架中。
阅读后若有收获,不吝关注,分享在看等操作!!!