Pytest基础自学系列

Posted COCOgsta

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pytest基础自学系列相关的知识,希望对你有一定的参考价值。

视频来源:B站《2022最新pytest接口自动化测试框架,三天带你精通pytest,带你写出最好的代码!》

一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!



Pytest框间实现一些前后置(固件,夹具)的处理,常用三种

一、setup/teardown,setup_class/teardown_class

为什么需要这些功能?

比如:web自动化执行用例之前,请问需要打开浏览器吗?用例执行之后需要关闭浏览器?

import time

import pytest


class TestLogin:

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

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

    age = 18

    def test_09_mashang(self):
        print("测试百里")

    def test_08_mashang(self):
        print("测试百里")

    @pytest.mark.run(order=1)
    @pytest.mark.skipif(age >= 18, reason='有条件的跳过')
    def test_03_mashang(self):
        print("测试百里")

    @pytest.mark.run(order=2)
    @pytest.mark.usermanage
    def test_05_mashang(self):
        print("测试百里")

    @pytest.mark.run(order=3)
    @pytest.mark.smoke
    @pytest.mark.skip(reason='跳过用例')
    def test_06_mashang(self):
        print("测试百里")

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

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

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

@pytest.fixture(scope="", params="", autouse="", ids="", name="")
  1. scope表示的是被@pytest.fixture标记的方法和作用域。function(默认),class,module,package/session。
  1. paparams:参数化(支持,list,tuple,字典列表[,,],字典元组(,,,))
  1. autouse=True:自动执行,默认False
  1. ids:当使用params参数化时,给每一个值设置一个变量名。意义不大。
  1. name:表示的是被@pytest.fixture标记的方法取一个别名。
@pytest.fixture(scope="function", params=['成龙', '甄子丹', '菜鸡']) # 这里的params是参数名,有s
def my_fixture(request):
    return request.param # 这里是属性名,是没有s的
    # return和yield都表示返回的意思,但是return后不能跟代码,yield返回后后面可以接代码

class TestLogin:

    def test_09_mashang(self, my_fixture):
        print("测试百里09")
        print('----------------'+ str(my_fixture))

    def test_08_mashang(self):
        print("测试百里08")

三、通过conftest.py和@pytest.fixture()结合使用实现全局的前置应用(比如:项目的全局登录,模块的全局处理)

  1. conftest.py文件是单独存放的一个夹具配置文件,名称是不能够更改。
  1. 用处可以在不同的py文件中使用同一个fixture函数。
  1. 原则上conftest.py需要和运行的用例放到同一层,并且不需要做任何的import导入的操作。

总结:

setup/teardown,
setup_class/teardown_class 它是作用域所有用例或者所有的类

@pytest.fixture() 它的作用是既可以部分也可以全部前后置

conftest.py和@pytest.fixture()结合使用,作用于全局的前后置

四、断言

assert 1==2

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

  1. 下载,解压,配置path路径。

https://github.com/allure-framework/allure2/releases

验证:allure --version

问题:dos可以验证但是pycharm验证失败,怎么办?重启pycharm

  1. 生成json格式的临时报告

--alluredir ./temp

  1. 生成allure报告

os.system('allure generate ./temp -o ./report --clean')

./temp 临时的json格式报告的路径

-o 输出output

./report 生成的allure报告的路径

--clean 清空/report原来的报告

以上是关于Pytest基础自学系列的主要内容,如果未能解决你的问题,请参考以下文章

Pytest基础自学系列

Pytest基础自学系列

Pytest基础自学系列

标记一个 Pytest 夹具而不是使用该夹具的所有测试

如何参数化 Pytest 夹具

如何从范围=会话的pytest夹具返回多个值