【码尚教育】Python自动化测试框架pytest—入门学习笔记

这篇具有很好参考价值的文章主要介绍了【码尚教育】Python自动化测试框架pytest—入门学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

一、pytest单元测试框架

二、 单元测试框架和自动化测试框架有什么关系

三、pytest简介

四、使用pytest默认的测试用例规则及基础应用

五、pytest测试用例的运行方式

六、pytest执行测试用例的顺序

七、如何分组执行​编辑

八、pytest跳过用例

九、pytest框架实现的一些前后置(固件、夹具)处理

十、YAML文件实现接口自动化

结语


前言

pytest 是一个成熟的全功能 Python 测试工具,可以帮助您编写更好的程序。它与 Python 自带的 Unittest 测试框架类似,但 pytest 使用起来更简洁和高效,并且兼容 unittest 框架。

【码尚教育】Python自动化测试框架pytest—入门学习笔记

一、pytest单元测试框架

(1)什么是单元测试

        单元测试是指在软件开发过程中,针对软件的最小单位(如函数、方法等)进行正确性的检查测试。

(2)常见的单元测试框架

        Java:junit和testing

        python:unittest和pytest

(3)单元测试框架主要做什么?

        1. 测试发现:从多个文件中找到我们的测试用例

        2. 测试执行:按照一定的顺序和规则执行并生成结果

        3. 测试判断:通过断言判断预期结果和实际结果的差异

        4. 测试报告:统计测试进度、耗时、通过率,生成测试报告

二、 单元测试框架和自动化测试框架有什么关系

(1)什么是自动化测试

        自动化测试包括一切通过工具(程序)的方式来代替或辅助手工测试的行为。其主要手段是模拟手工测试,通过组织编写自动化脚本执行测试用例,解决测试工作量大的问题,自动化测试能有效的提高测试效率。

(2)自动化测试的作用

        1. 提高测试效率,降低维护成本

        2. 减少人工干预,提高测试准确性,增加代码的复用性

(3)二者的关系

        单元测试是自动化测试的组成部分之一

三、pytest简介


        1. pytest是一个非常成熟的python单元测试框架,比unittest更加灵活,容易上手

        2. pytest可以和selenium、request、qppium结合实现web自动化、接口自动化、app自动化

        3. pytest可以实现测试用例的跳过及rerun失败用例重试

        4. pytest可以和allure生成非常美观的测试报告

        5. pytest可以和Jenkins持续集成

        6. pytest有很多强大的插件

                pytest-html (生成html格式的自动化测试报告)

                pytest-xdist (测试用例分布式执行,多cpu分发)

                pytest-ordering (用于改变测试用例的执行顺序)

                pytest-rerunfailures (用例失败后重跑)

                allure-pytest (用于生成美观的测试报告)

        在这里我们可以一次性将这些插件一起导入项目中,具体操作如下:

【码尚教育】Python自动化测试框架pytest—入门学习笔记

        输入pytest -version 即可查看是否导入成功,如果显示失败,可以查看一下位置是否出现错误

【码尚教育】Python自动化测试框架pytest—入门学习笔记

四、使用pytest默认的测试用例规则及基础应用


        1. 模块名必须以test_开头或_test结尾

        2. 测试类必须以Test开头,并且不能有init方法

        3. 测试方法必须以test开头

【码尚教育】Python自动化测试框架pytest—入门学习笔记

五、pytest测试用例的运行方式


(1)主函数模式

        1. 运行所有:pytest.main()

if __name__ == '__main__':
    pytest.main()


        2. 指定模块:

if __name__ == '__main__':
    pytest.main(['-vs','test_id.py'])


ps:我用的是mac系统,在写.py文件的路径时是这样写的,如果是win,注意一下文件路径即可。

        3. 指定目录

if __name__ == '__main__':
# 测试interface_testcase 目录下的全部用例
    pytest.main(['-vs','interface_testcase'])
 
 
if __name__ == '__main__':
# 测试interface_testcase 目录下的test_interface01.py 中的用例
    pytest.main(['-vs','interface_testcase/test_interface01.py'])


(2)命令行模式

        1. 运行所有:pytest

        2. 指定模块:pytest test_goods.py

        3. 指定目录:pytest testcase

                              pytest testcase/test_goods.py

pytest中的参数详解:

        -s:表示输出调试信息,输出print信息

        -v:显示更加详细的信息

        -vs:两个参数可以同时使用

        -n:支持多线程或者分布式运行

if __name__ == '__main__':
# 有两个线程来执行testcase 目录下的测试用例
    pytest.main(['-vs','testcase','-n 2'])


        --reruns=NUM:失败用例重跑,将这个模块多执行num次,最后返回结果

if __name__ == '__main__':
    pytest.main(['-vs','--reruns=2'])


        -x:只要有一个用例失败,测试就会停止

        -maxfail=2:如果有两个测试用例失败,测试停止

        -k:根据测试用例的部分字符串指定测试用例

if __name__ == '__main__':
# 在testcase 目录下,带有case的测试用例全部被执行
    pytest.main(['-vs','testcase','-k "case"'])


(3)通过读取pytest.ini配置文件运行

        pytest.ini是pytest单元测试框架的核心配置文件

        1. 位置:一般放在项目的根目录

        2. 编码:必须是ANSI,可以使用notepad++修改编码格式

        3. 作用:改变pytest默认的行为

        4. 运行规则:不管是主函数的模式运行还是命令行模式运行,都会读取这个文件

        pytest.ini配置文件的示例如下:

【码尚教育】Python自动化测试框架pytest—入门学习笔记

六、pytest执行测试用例的顺序


        unittest:根据ASCII大小执行

        pytest:默认按照用例先后顺序执行

                可以通过@pytest.mark.run(order=)来指定执行顺序

【码尚教育】Python自动化测试框架pytest—入门学习笔记

七、如何分组执行

if __name__ == '__main__':
# 只执行smoke
    pytest.main(['-vs','-m "smoke"'])
 
if __name__ == '__main__':
# 执行smoke或者usermanage
    pytest.main(['-vs','-m "smoke or usermanage"'])

八、pytest跳过用例


(1)无条件跳过

@pytest.mark.skip(reason="")


(2)有条件跳过

class TestStudent:
    age = 20;
 
    @pytest.mark.skipif(age>18, reason="age is over 18")
    def test_01(self):
        print('age is 20')

九、pytest框架实现的一些前后置(固件、夹具)处理


(1)setup/teardown,setup_class/teardown_class

        为什么需要这些功能?

                比如:web自动化执行用例之前都需要打开浏览器,在用例执行完毕后都要关闭浏览器。如果每一次都重新写打开、关闭浏览器的代码会造成代码冗余。

        setup/teardown 示例如下:这种方式的前后置会在每一个测试用例前后都执行一次

class TestA:
    def setup(self):
        print("\n open the client")
 
    def test_01(self):
        print('this is a test')
 
    def teardown(self):
        print("\n close the client")
 
if __name__ == '__main__':
    pytest.main()


        setup_class/teardown_class 示例如下:这种方式的前后置会在每个类前后执行一次

class TestA:
    def setup_class(self):
        print("\n open the client")
 
    def test_01(self):
        print('this is a test')
 
    def teardown_class(self):
        print("\n close the client")
 
if __name__ == '__main__':
    pytest.main()


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

        @pytest.fixture装饰器的几个参数:

                scope:表示被装饰器标记的方法的作用域(function默认,class,module,package,session)

                params:参数化(支持list[],tuple(),[(),()],([],[]))

                autouse=True:自动执行,默认是false

                ids:当使用params参数时,给每一个参数设置一个变量名

                name:标记方法的别名

        只实现前置的示例:

@pytest.fixture(scope="function")
# 这个my_fixture()只能被当前.py文件中的函数使用
def my_fixture():
    print("实现前置")
 
class TestA:
 
    def test_01(self,my_fixture):
        print('this is a test')
 
if __name__ == '__main__':
    pytest.main()


        既有前置又有后置的示例:

@pytest.fixture(scope="function")
def my_fixture():
    print("实现前置")
    yield
    print("实现后置")
 
class TestA:
 
    def test_01(self,my_fixture):
        print('this is a test')
 
if __name__ == '__main__':
    pytest.main()


(3)通过conftest.py和@pytest.fixture()结合实现全局前置

        1. conftest.py文件是一个单独存放的夹具配置文件,名称不能更改

        2. 可以在不同的.py文件中使用同一个my_fixture函数

        3. conftest.py需要和运行的测试用例放在同一级目录下

十、YAML文件实现接口自动化


        接口自动化测试小示例:(本次使用的接口说B站上的软件测试课程网站)

class TestApi:
    
    def test_02(self):
# 如果想用我这个示例来做实验的话,需要将这个网页先打开
# https://www.bilibili.com/video/BV1Wf4y147en?p=9&spm_id_from=pageDriver
 
        url = 'https://www.bilibili.com/video/BV1Wf4y147en'
        params = {
            "p" :"9",
            "spm_id_from":"pageDriver"
        }
# 这里要导入一个requests库
        res = requests.get(url,params=params)
        print(res.text)
 
if __name__ == '__main__':
    pytest.main()

        将上面的测试用例转换成读取YAML文件形式:

                先写一个YAML文件,如下:

                        注意!冒号的后面一定要有空格!!!这是yaml文件的格式

【码尚教育】Python自动化测试框架pytest—入门学习笔记

        然后编译读取YAML文件的工具类

class YamlUtil:
    def __init__(self,yaml_file):
        self.yaml_file = yaml_file
 
    def read_yaml(self):
        with open(self.yaml_file,encoding='utf-8') as f:
            # 反序列化
            value = yaml.load(f,Loader=yaml.FullLoader)
            print(value)
            return value


        最后进行测试

class TestApi:
    @pytest.mark.parametrize('args', YamlUtil('testcase/test_api.yaml').read_yaml())
    def test_01_baili(self, args):
        print(args)
        url = args['request']['url']
        params = args['request']['params']
        res = requests.get(url, params=params)
        print(res.text)
 
if __name__ == '__main__':
    pytest.main()

结语

感谢每一个认真阅读我文章的人!!!

如果下面这些资料用得到的话可以直接拿走:

1、自学开发或者测试必备的完整项目源码与环境

2、测试工作中所有模板(测试计划、测试用例、测试报告等)

3、软件测试经典面试题

4、Python/Java自动化测试实战.pdf

5、Jmeter/postman接口测试全套视频获取

6、Python学习路线图

重点:配套学习资料和视频教学

 那么在这里我也精心准备了上述大纲的详细资料包含:电子书,简历模板,各种工作模板,面试宝典,自学项目等。需要的朋友和我在评论区互动交流吧!文章来源地址https://www.toymoban.com/news/detail-410997.html

到了这里,关于【码尚教育】Python自动化测试框架pytest—入门学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python+Appium+Pytest+Allure实战APP自动化测试框架

    Hi,大家好。今天我们来聊聊Python+Appium+Pytest+Allure实战APP自动化测试,pytest只是单独的一个单元测试框架,要完成app测试自动化需要把pytest和appium进行整合,同时利用allure完成测试报告的产出。 编写常规的 线性 脚本具体的步骤如下: 1、设计待测试APP的 自动化测试 用例 2、

    2023年04月09日
    浏览(43)
  • 基于Python+Pytest+Playwright+BDD的UI自动化测试框架

    本框架是基于Python+Pytest+Playwright+BDD的UI自动化测试框架。 测试社区地址: https://www.gitlink.org.cn/zone/tester 入群二维码:https://www.gitlink.org.cn/floraachy/apiautotest/issues/1 对于框架任何问题,欢迎联系我! 支持通过命令行指定浏览器,选择需要运行的浏览器。 支持通过命令行指定运行

    2024年02月07日
    浏览(37)
  • 一个简单的接口自动化测试框架:Python+Requests+Pytest+Allure

    project:api_test ——api_keyword ————api_key.py:接口驱动类 ——case ————test_cases.py:测试套件和测试用例 ——report_allure( 无需创建 ):allure报告 ——result( 无需创建 ):测试用例运行结果 ——VAR ————VAR.py:常量类 conftest.py:项目级别fixture main.py:主函数

    2024年02月03日
    浏览(42)
  • Python+Pytest+Allure+Git+Jenkins数据驱动接口自动化测试框架

    一、接口基础 接口测试是对系统和组件之间的接口进行测试,主要是效验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系。其中接口协议分为HTTP,RPC,Webservice,Dubbo,RESTful等类型。 接口测试流程 1、需求评审,熟悉业务和需求 2、开发提供接口文档 3、编写接口测

    2024年02月08日
    浏览(49)
  • APP自动化测试-Python+Appium+Pytest+Allure框架实战封装(详细)

    pytest只是单独的一个单元测试框架,要完成app测试自动化需要把pytest和appium进行整合,同时利用allure完成测试报告的产出。 编写常规的线性脚本具体的步骤如下: 1、设计待测试APP的自动化测试用例 2、新建app测试项目 3、配置conftest.py文件等 4、编写整体app测试用例运行文件

    2024年02月14日
    浏览(39)
  • 【附源码】完整版,Python+Selenium+Pytest+POM自动化测试框架封装

    1、测试框架简介 1)测试框架的优点 代码复用率高,如果不使用框架的话,代码会显得很冗余。 可以组装日志、报告、邮件等一些高级功能。 提高元素等数据的可维护性,元素发生变化时,只需要更新一下配置文件。 使用更灵活的PageObject设计模式。 2)测试框架的整体目录

    2024年02月04日
    浏览(33)
  • (Python)Requests+Pytest+Allure接口自动化测试框架从0到1搭建

    前面,已经学习了如何用SpringBoot写接口以及与Mysql数据库进行交互,具体可查阅下面的这篇博客,今天学习一下基于Python的接口自动化测试框架的搭建,主要包括以下内容:利用request库发送请求,请求数据参数化处理,还涉及到数据库(Mysql+MongDB)方面的交互,包括如何取数

    2024年02月13日
    浏览(46)
  • Python+Requests+Pytest+Excel+Allure 接口自动化测试项目实战【框架之间的对比】

            --------UnitTest框架和PyTest框架的简单认识对比与项目实战-------- 定义: Unittest是Python标准库中自带的单元测试框架,Unittest有时候也被称为PyUnit,就像JUnit是Java语言的标准单元测试框架一样,Unittest则是Python语言的标准单元测试框架。 Pytest是Python的另一个第三方单元测

    2024年02月09日
    浏览(31)
  • 自动化测试(三):接口自动化pytest测试框架

    API:Application Programming Interface 接口自动化按照自动化的工具可分为 基于 接口测试工具 的接口自动化 eg1:Postman+Newman+git/Svn+Jenkins(基于Javascript语言)接口自动化 Postman :创建和发送 API 请求,并对响应进行断言和验证。 Newman : Postman 的命令行工具,它允许测试人员在没有界

    2024年02月10日
    浏览(42)
  • Pytest自动化测试框架---(单元测试框架)

    unittest是python自带的单元测试框架,它封装好了一些校验返回的结果方法和一些用例执行前的初始化操作,使得单元测试易于开展,因为它的易用性,很多同学也拿它来做功能测试和接口测试,只需简单开发一些功能(报告,初始化webdriver,或者http请求方法)便可实现。 但自

    2024年02月14日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包