编辑
登录:不同的用户名,不同的明码,不同的组合都须要做登录场景的测试,失常的排列组合下可能会产生多个用例
搜寻:不同的搜寻条件产生不同的搜寻后果,搜寻也是常见的测试项,单个搜寻参数或者多种搜寻参数的组合;同样也会产生多个用例。
参数化:咱们在写自动化用例的时候会有很多办法,个别咱们都会把数据通过参数来传递给办法,而不会间接在办法中写“死”,所以办法之间的数据传递都是通过参数化来进行,利用参数化进行数据与变量的对应;比方咱们的登录账号密码设置在参数中,再将参数传递到办法中。
public MainPage login(String username, String password) { sendKeys(inputUsername,username); sendKeys(inputPassword,password); click(loginBtn); return new MainPage(); }
数据驱动:将参数化中的数据起源变成从内部读取,参数有一个存放数据的中央,在用例执行的时候去去数据;这个数据存储的中央能够是咱们定义的数组、hashmap,也能够是从内部文件中(excel、csv、xml、yaml等)读取。
例如上述的搜寻案例,咱们能够将搜寻条件放入内部文件中,每次执行搜寻用例时,去文件中获取数据,依据获取到的数据执行不同的搜寻测试即可。
- 洗衣液 - - 帽子 - - 手套
总结下来:
在执行测试工作过程中,有很多过程是须要动态变化的,如果每一次的变动都须要编码部署,那么整个执行的流程就会边长;
对于业务测试工程师来说,保护自动化代码有肯定的门槛,须要相熟编程语言和测试框架的构造;
定义好了数据驱动,将变动的数据放入配置文件中进行保护,既便捷(无需找到对应代码批改部署),也升高了保护的门槛(业务测试只须要在配置文件中批改数据即可)
与测试数据的数据驱动大致相同,次要也是不便业务测试保护,升高保护门槛和代码批改部署出错的危险;批改配置文件,整个业务行为和形象是不必扭转的,当然,在UI自动化中配合PO一起应用会“风味更佳”。
手工录制测试步骤,间接生成代码比拟艰难,能够生成步骤的配置文件,让代码去读配置文件,实现自动化的回放;(此方面自己临时仅理解过,还未实际落地,实践上是能够实现的。)
不要在测试用例内实现大量的数据驱动:
用例通过PO的调用是可能十分清晰展现出业务执行场景的,业务才是用例的外围;一旦在用例里应用了大量数据驱动,如调用各种yaml、csv等数据文件,会造成用例可读性变差,保护复杂度变高;
测试数据的数据驱动测试步骤的数据驱动定位符行为流断言的数据驱动不同数据格式文件的比照
编辑1080×331 48.6 KB
从上述比照后果中,Json 和 YAML 对于数据结构的反对和书写水平是较好的;然而, YAML 的写法更简洁,并且还能够正文,因而最举荐应用的就是(从表格中的所处都地位也可猜到~)…位于C位的YAML!
那么到底什么是YAML,又如何应用,上面简略来理解一下
yaml 的语法
大小写敏感应用缩进示意层级关系缩进时不容许应用Tab键,只容许应用空格。缩进的空格数目不重要,只有雷同层级的元素左侧对齐即可示意正文
yaml 反对的三种数据结构
纯量(scalars):单个的、不可再分的值,例如数字、字符串、布尔值等对象:键值对的汇合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
键值对模式 key: value #行内对象 person: { name: allen, age: 25 } #以-结尾示意为一个数组里的值 - A - B - C #数组内嵌套子数组,用一个空格缩进示意 - - a - aa - - b - bb
对象和数组能够联合应用,造成复合构造
languages: - Ruby - Perl - Python websites: YAML: yaml.org Ruby: ruby-lang.org Python: python.org Perl: use.perl.org
把一个文件数据通过类型建设关联,并创立出一个类的实例,反之也能够把一个对象写入文件中。
先来看jackson-databind对json文件的操作
增加 maven 依赖
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.9.3</version> </dependency>
写 json 文件
1)先创立一个类,蕴含变量name,age
public class TestFileSource { public String name; public int age; }
2)创立单元测试,创立ObjectMapper对象,调用writeValue对json文件进行写操作
@Test void writeJson() throws IOException { ObjectMapper mapper = new ObjectMapper(); TestFileSource testFileSource = new TestFileSource(); mapper.writeValue(new File("..\demo.json"),testFileSource); }
3)失去demo.json文件的后果,从后果能够看到TestFileSource类中的变量曾经被写入的json文件中
{"name":null,"age":0}
读 json 文件
1)创立单元测试,创立ObjectMapper对象,调用readValue办法对json文件进行数据读取
@Test void readJson() throws IOException { ObjectMapper mapper = new ObjectMapper(); TestFileSource testFileSource = mapper.readValue(TestFileSource.class.getResourceAsStream("/demo.json"), TestFileSource.class); System.out.println(testFileSource); System.out.println(testFileSource.age); }
2)读取后果
ApiDemos.testcase.TestFileSource@4562e04d 0
输入丑陋的 json 格局1)创立单元测试,创立ObjectMapper对象,调用writerWithDefaultPrettyPrinter().writeValueAsString办法可对指定对象进行json数据格式的输入
@Test void prettyPrintJson() throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); // pretty print String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(new TestFileSource()); System.out.println(json); }
2)打印后果
{ "name" : null, "age" : 0 }
参考链接
jackson-databind GitHub地址:
https://github.com/FasterXML/...
再来看jackson-dataformats-text,这是一个能够对YAML、CSV、Properties和XML文件进行操作的库,也是目前最罕用的,不过这里咱们只重点关注其对YAML文件的操作
增加maven依赖
<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-yaml</artifactId> <version>2.9.8</version> </dependency>
读 YAML 文件想要读取 YAML 文件,最次要的是在new ObjectMapper对象的时候退出new YAMLFactory(),这样就胜利切换至 yaml 操作的状态,而后利用readValue办法就能够实现对yaml文件的数据读取了1)创立 YAML 文件
name: allen age: 11
2)创立ObjectMapper对象,设置new YAMLFactory()
@Test void readYaml() throws IOException { ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); TestFileSource testFileSource = mapper.readValue(TestFileSource.class.getResourceAsStream("/demo2.yaml"), TestFileSource.class); System.out.println(testFileSource); System.out.println(testFileSource.age); }
打印后果
ApiDemos.testcase.TestFileSource@ba2f4ec 11
在readValue的办法中能够看到,第一个参数填的是文件地址,第二个参数就是精华所在!咱们能够给定一个对象类型,或者一个二维数组等,用来产生映射关系,将文件数据和咱们的对象绑定,不便数据的读取。
如上述例子中咱们通过TestFileSource的实例化对象来调用age变量。
输入丑陋的 YAML 格局与json输入的形式基本一致,只须要在new ObjectMapper对象的时候退出new YAMLFactory()即可1)创立类和类的成员变量,蕴含纯量、数组和哈希
public class TestFileSource { public String name = "tester"; public int age = 2; public Object[][] arr= {{1,2,3,},{"a","b","c"}}; public HashMap<String,Object> map = new HashMap<String, Object>(){ { put("name","tester"); put("sex","男"); } }; }
2)创立单元测试,创立ObjectMapper对象,退出new YAMLFactory() 参数,调用writerWithDefaultPrettyPrinter().writeValueAsString办法可对指定对象进行yaml数据格式的输入
@Test void prettyPrintYaml() throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); // pretty print String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(new TestFileSource()); System.out.println(json); }
3)打印后果
--- name: "tester" age: 2 arr: - - 1 - 2 - 3 - - "a" - "b" - "c" map: sex: "男" name: "tester"
参考链接jackson-dataformats-text GitHub地址:
https://github.com/FasterXML/...
同样是做自动化测试,在测试高手和一般小白的世界里,齐全是不一样的风光。