zoukankan      html  css  js  c++  java
  • Pytest从测试类外为测试用例动态注入数据

    今天Nelly问我Pytest能不能支持从TestClass类外传入参数?从类外批量传入各个test方法需要的参数。因为数据文件可能有很多情况,不方便依次匹配。
    然而又必须用类对用例进行归类及复用,数据要通过类外进行遍历。不能直接使用pytest.mark.parametrize。

    这里采取的一个做法是:

    1. 添加命令行选项 --data,接受一个yaml文件
    2. data这个fixture方法里,获取--data传进来的文件路径,打开并加载所有数据,从request中获取调用data 的用例名,从所有数据中取出该条用例的数据返回

    具体参考以下代码:
    data.yaml文件内容,注意数据字段要与测试方法名一致,方便自动对应数据。

    test_a: 
      a: 1
      b: 2
    
    test_b:
      a: 3
      b: 4
    

    conftest.py文件内容

    import pytest
    import yaml
    
    def pytest_addoption(parser):   # 添加运行参数
        parser.addoption("--data", action="store", help="data file")
    
    @pytest.fixture
    def data(request):
        file_path = request.config.getoption("--data")  # 获取--data参数传的文件路径
        with open(file_path) as f:   # 加载所有数据
            all_data = yaml.safe_load(f) 
    
        test_case_name = request.function.__name__  # 获取调用的data这个fixture方法的测试方法名称
    
        return all_data.get(test_case_name)   # 只返回指定用例的数据
    

    测试模块test_demo3.py内容

    import pytest
    
    class TestDemo(object):
        def test_a(self, data):  # 所有用例要带上data这个fixture参数
            print(data)
    
        def test_b(self, data):
            print(data)
    
    
    if __name__ == '__main__':
        pytest.main(['test_demo3.py', '-sq', '--data=data.yaml'])
    
  • 相关阅读:
    第二阶段站立会议05
    第二阶段站立会议04
    第一阶段冲刺总结
    站立会议08
    站立会议07
    站立会议06
    站立会议05
    站立会议04
    第一次冲刺第3天
    站立会议2
  • 原文地址:https://www.cnblogs.com/superhin/p/11694919.html
Copyright © 2011-2022 走看看