微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

UI 自动化测试实战二| 测试数据的数据驱动

关注公众号,获取测试开发实战干货合辑。本文节选自霍格沃兹《测试开发实战进阶》课程教学内容,进阶学习文末加群。

数据驱动就是通过数据的改变驱动自动化测试的执行,最终引起测试结果的改变。简单来说,就是 参数化在自动化测试中的应用

测试过程中使用 数据驱动的优势 主要体现在以下几点:

  1. 提高代码复用率,相同的测试逻辑只需编写一条测试用例,就可以被多条测试数据复用,提高了测试代码的复用率,同时提高了测试代码的编写效率。

  2. 异常排查效率高,测试框架依据测试数据,每条数据生成一条测试用例,用例执行过程相互隔离。如果其中一条失败,不会影响其他的测试用例。

  3. 代码可维护性高,清晰的测试框架利于其他测试工程师阅读,提高代码的可维护性。

测试数据的数据驱动

数据量小的测试用例可以使用代码的参数化来实现数据驱动,数据量大的情况下建议大家使用一种结构化文件(例如 YAML,JSON
等)来对数据进行存储,然后在测试用例中读取这些数据。

参数化实现数据驱动

Pytest 提供了 @pytest.mark.parametrize 装饰器来进行参数化,可以使用参数化来实现数据驱动。代码如下:

import pytest  
  
@pytest.mark.parametrize("key, stock_type, price", [  
        ("alibaba", "BABA", 200),  
        ("JD", "JD", 20)  
    ])  
    def test_search_data(self, key, stock_type, price):  
        assert self.main.goto_search_page().\  
        search(key).get_price(stock_type) > price  

上面的代码首先使用 @pytest.mark.parametrize
装饰器,传递了两组数据,测试结果显示有两条测试用例被执行,而不是一条测试用例。也就是 Pytest
会将两组测试数据自动生成两个对应的测试用例并执行,生成两条测试结果。

使用 YAML 文件实现数据驱动

当测试数据量大的情况下,可以考虑把数据存储在结构化文件中。从文件中读取出代码中所需要格式的数据,传递到测试方法中执行。这里推荐大家使用 YAML
类型的文件来存储测试数据。YAML 使用动态字段进行结构化,它以数据为中心,比 Excel、CSV、JSON、XML 等更适合做数据驱动。

下面,我们将上面参数化的两组数据存储到 YAML 文件中,创建一个 data/searchdata.yml 文件代码如下:

-  
  - 'alibaba'  
  - 'BABA'  
  - 200  
-  
  - 'JD'  
  - 'JD'  
  - 20  

上面的代码定义了一个 yaml 格式的数据文件 searchdata.yml
文件中定义了一个列表,列表中有两组数据,最后生成的是这样的数据格式:[["alibaba", "BABA", 200],["JD", "JD", 20]]

下一步将测试用例中参数化的数据改造成从 searchdata.yml 文件中读取,代码如下:

import pytest  
import yaml  
  
@pytest.mark.parametrize("search_key, type, price",\  
yaml.safe_load(open("../data/searchdata.yml")))  
    def test_search(self, search_key, type, price):  
        assert self.main.goto_search_page().\  
        search(search_key).get_price(type)>price  

上面的代码,只需要使用 yaml.safe_load() 方法,就来读取 searchdata.yml 文件中的数据,分别传入到用例
test_search() 方法中完成数据的输入与结果的验证。而如果使用 Excel、CSV 文件格式进行数据的存储,需要先从 Excel
文件中读取数据,再解析成需要的格式。而使用 YAML 则完全省去了这个过程。

以上,关于其他环节的数据驱动,在后续章节分享

【相关文章


**
来霍格沃兹测试开发学社,学习更多软件测试与测试开发的进阶技术,知识点涵盖web自动化测试 app自动化测试、接口自动化测试、测试框架、性能测试、安全测试、持续集成/持续交付/DevOps,测试左移、测试右移、精准测试、测试平台开发、测试管理等内容,课程技术涵盖bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandBox等相关技术,全面提升测试开发工程师的技术实力

点击获取更多信息

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐