Pytest测试实战
The pytest
framework makes it easy to write small, readable tests, and can scale to support complex functional testing for applications and libraries. 这段话很好地阐述了Pytest的设计思想与强大的特性。迄今为止,不管是市场的招聘需求还是在企业级里面进行自动化测试都需要掌握Python语言体系中的Pytest测试框架。Pytest以轻量级的设计可以在编写TestCase方面具备天然的优势,又能够满足不同测试场景下的应用,本文章会详细的阐述这部分。
TestCase编写规范
从研发质量角度而言,所谓测试就是通过测试的思维与技术的思维来保障被测产品的逻辑可用性、业务完整性、底层服务的稳定性、用户层面的易用性。因此测试需要设计出一定的TestCase来验证结果满足这个特性,TestCase的要素很多,必要的TestCase要素分别是前提条件、测试步骤、期望结果,在自动化测试领域设计(编写)的TestCase依然会满足这个要素,但是从TestCase独立性、完整性等特点出发,自动化的TestCase要素分别是前置条件、测试步骤、结果验证、清理。前置条件与清理部分我们称呼为“测试固件”,也就是针对一个测试场景需要验证时的初始化与清理的部分,自动化测试用例编写规范详细信息见自动化测试用例规范,根据这些规范与原则,可以总结出TestCase与测试对象之间的关系具体如下。
Pytest优势
在Python语言技术栈体系中,单元测试框架应用最广泛的是unittest与pytest。unittest也是非常优秀的单元测试框架,它有很完善的测试固件、测试验证、测试报告、测试执行等策略。在早期可以说不管是UI自动化测试还是API自动化测试,在以Python语言为技术栈的体系中,基本都是使用的unittest作为单元测试框架来进行各种不同类型的自动化测试用例编写与执行。技术的发展逐渐演变为Pytest,这个过程中直接产生的结果是后续进行的UI自动化测试与API自动化测试都逐渐地使用Pytest单元测试框架代替了unittest,这个过程可以总结为不是unittest不优秀,而是Pytest与unittest测试框架相比较,更加优化,使用灵活度更高,具体体现在如下几点。
Pytest搜索规则
测试搜索指的是在pytest的测试框架中,如果没有指定⽬录,它默认是会搜索⼀个项⽬下所有可执⾏的测试模块以 及测试模块⾥⾯的测试⽤例来进⾏的,并不在乎测试⽤例是在哪个package那个模块的,这样的⼀个过程成为“测试 搜索”,只要符合它的规则的它都是会被执⾏的。首先抛开编程模式,所有的测试模块建议都存放在test的模块下,创建的测试模块都是以test_开头,一言以蔽之,这样就能够很清晰看到TestCase是写在什么包下,当然在具体的测试模块中如果编写的TestCase不符合Pytest搜索的规则,那么也不会被执行,见如下的案例代码。
import pytest
def add(a,b):
return a+b
def str_add():
assert add('a','b')=='ab'
class AddTest():
def integer_add(self):
assert add(2,3)==5
如上的测试代码使用Pytest执行后,里面编写的不管是函数式的还是面向对象的都不会被执行,执行结果就会显示为:collected 0 items 。这是因为编写的测试用例不符合Pytest搜索的规则,规范的写法是如果是函数式的编程模式,编写的测试函数都必须是以test开头,建议test_的模式,如果是测试类,都必须是以Test开头并且里面的测试方法也都必须是以test开头,建议test_的模式,按照这个要求调整如上的代码,见调整后的代码。
import pytest
def add(a,b):
return a+b
def test_str_add():
assert add('a','b')=='ab'
class TestAdd():
def test_integer_add(self):
assert add(2,3)==5
调整后的代码再次进行执行,执行后的结果信息如下所示。
在实际的工作中,可以根据公司的具体规范来使用不同的编程模式来编写TestCase,但是需要特别强调的是不管是哪种规范,编写的测试函数或者是测试方法都需要遵守Pytest的搜索规则。
感谢您的阅读!《Python服务端测试开发》书籍已出版,书籍主要面向想系统、全栈学习服务端测试开发领域内的测试工程师,读者包含但不限于软件测试工程师、自动化测试工程师、测试开发工程师和测试管理者。通过本书您将会学习到服务端测试领域测试开发技术栈知识,包含了API测试框架设计思想与案例实战,Docker容器化技术,基于DevOps体系下的CI/CD技术栈知识体系,CI/CD技术在企业的技术落地案例,服务端测试开发领域的性能测试核心理论、方法论、流程化和主流性能测试在服务端的最佳实践、性能测试过程中全链路监控与分布式追踪监控技术解决方案,JVM性能分析与案例监控实践。同时您也会学习到微服务架构下质量体系建设,混沌工程实践,和针对底层高可用系统的保障技术思路。👇点击购买,快速掌握服务端测试开发技术栈体系。
END