博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Pytest框架实现前后置(固件、夹具)处理

Posted on 2024-07-11 10:15  砂锅米粥  阅读(67)  评论(0编辑  收藏  举报

一、setup/teardown,setup_class/teardown_class

  • 为什么需要这些功能?
    比如:web自动化执行用例之前,需要打开浏览器

class Testshaguo:

#这个在所有的用例之前只执行一次
def setup_class(self):
    print('在每个类执行之前的初始化的工作:比如:创建日志对象,创建数据库的连接,创建接口的请求对象')


#在每个用例之前执行 一次
def setup(self):
    print('在执行测试用例之前执行的代码:打开浏览器,加载网页\n')

def test_100_baibai(self):
    print('测试白白\n')

def test_101_baiai(self):
    print('测试白爱\n')

def test_102_babai(self):
    print('测试八白\n')

def teardown(self):
    print('在执行测试用例之后扫尾的代码:关闭浏览器\n')


def teardown_class(self):
    print('在每个类执行之后的扫尾的工作:比如:销毁日志对象,销毁数据库的连接,销毁接口的请求对象')

注意:和unittest不同,全部小写

二、使用@pytest.fixture()装饰器,实现部分用例的前后置

装饰器
@pytest.fixture(scope="",params="",autouse="",ids="",name="")

  • scope表示的是被@pytest.fixture标记的方法的作用域。function(默认),class,module,package/session
  • params:参数化,
    • 支持:列表[],元祖(),字典列表{[],[]...},字典元祖{(),(),()...}
      @pytest.fixture(scope="function", params="['成龙','你','我']")
      def my_fixture(request):
      print('前置')
      yield request.param
      print('后置')

class Testshaguo:

def test_100_baibai(self):
    print('测试白白\n')

def test_101_baiai(self,my_fixture):
    print('测试白爱\n')
    print('--------'+str(my_fixture))
  • params=['成龙','你','我'],这里params是参数名,有s

  • request.param这里是属性名,没有s

  • return和yield都表示返回的意思,但是return的后面不能有代码,yield返回后面可以有代码

  • autouse=True:自动执行,默认False

  • ids:当使用params参数化时,给每一个值设置一个变量名,意义不大

  • name:给表示的是被@pytest.fixture标记的方法取一个别名

    • 当取了别名之后,那么原来的名称不能使用

三、通过conftest.py和@pytest.fixture()结合使用实现全局的前置应用

  • 比如:项目的全局登录,模块的全局处理
  1. conftest.py文件是单独存放的夹具配置文件,名称是不能更改
  2. 用处可以在不同的py文件中使用同一个fixture函数
  3. 原则上conftest.py需要和运行的用例放到同一层,并且不需要

总结:

  • setup/teardown,setup_class/teardown_class 是作用于所有用例或者所有的类
  • @pytest.fixture() 作用既可以部分,也可以全部前后置
  • conftest.py和@pytest.fixture()结合使用,作用于全局的前后置

四、断言
Assert
assert 1==2

五、pytest结合allure-pytest插件生成allure测试报告

  • 插件:Allure-pytest
  1. 下载,解压,配置path路径
    https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline
  • path路径配置
    • 验证:allure --version(cmd、pycharm)
      • 问题:cmd可以验证,pycharm验证失败?
      • 解决方法:重启pycharm
  1. 加入命令,生成json格式的临时报告
    [pytest]
    addopts = -vs --alluredir ./temp
  2. 生成allure报告
    os.system('allure generate ./temp -o ./report --clean')
  • Allure generate 命令,固定的
  • ./temp 临时的json格式报告的路径
  • -o 输出output
  • ./report 生成的allure报告的路径
  • --clean 清空./report路径原来的报告