Python栈最佳自动化测试框架

张开发
2026/4/19 1:20:44 15 分钟阅读

分享文章

Python栈最佳自动化测试框架
Python在测试领域的作用主要体现在自动化测试方面‌它具有多个优势‌使得越来越多的软件测试工程师选择使用Python进行自动化脚本的编写。‌人生苦短我用PythonPython是一种解释型、高级的通用编程语言较于Java、C等语言相对比较容易上手。对于大多数测试工程师而言工作中运用Python可以快速开发一些自动化工具让繁琐的工作自动化实现例如操作文本、服务器、数据库 操作等。毫不夸张的说我从测试小白到中高级测试工程师进阶过程中最大的推动里就是接触了Python让我发现原来测试工程师并非每天点点点我们可以把点点点的工作(重复性)交给机器去执行。将体力劳动转化为脑力劳动进而留出更多哦时间做更具创造性的工作。因此Python值得想进阶的测试工程师学习。最近AI大火测试行业内利用AI技术做测试的论调吹的天花乱坠例如AI生成用例等但是实际上自动化测试仍是测试工作中的核心之核心可以理解为是测试质量的地盘。本文主要介绍如何搭建测试地盘的工具如何借助于Python实现自动化测试框架。测试框架汇总1. Robot2. PyTest1. pytest-xdist支持分布式测试可以在多个机器上并行运行测试用例。2. pytest-cov可以生成代码覆盖报告帮助开发者了解代码的覆盖情况。3. pytest-flake8可以集成Flake8代码风格检查器在测试运行时检查代码风格问题。4. pytest-mock可以模拟对象方便测试时隔离对象的行为。5. pytest-rerunfailures可以自动重新运行失败的测试用例节省开发者的时间。6. pytest-rerunfailures-longtimeout可以自动重新运行失败的测试用例并设置较长的超时时间防止测试长时间运行。3. Unittest4. DocTest5. Nose26. Testify测试工具对比让我们用一个简短的对比表格快速总结一下这些框架测试类型类别Robot验收测试关键词驱动测试方法。Pytest单元测试特殊而简单的类适配器使测试更加容易。unittest单元测试快速的测试集合和灵活的测试执行。DocTest单元测试用于命令提示符和包含应用程序的Python交互式 shell。Nose2unittest扩展库一个功能强大且灵活的测试框架支持多种测试包括单元测试、集成测试、功能测试等。Testifyunittest扩展库Robot最受欢迎的机器人框架是一个基于Python的开源自动化测试框架。该框架完全用Python编写用于接受测试和测试驱动开发。在Robot框架中使用关键字风格编写测试用例。该机器人能够运行Java和.Net并且还支持在跨平台如Windows、Mac OS和Linux等上对桌面应用程序、移动应用程序和Web应用程序等进行自动化测试。除了验收测试外机器人还用于机器人流程自动化RPA。强烈建议使用PipPython包安装器安装Robot。Robot的强大功能之一是它使用了表格数据语法、基于关键字的测试、丰富的库和工具集以及并发测试这使得它在测试人员中很受欢迎。*** Settings *** Library SeleniumLibrary *** Variables *** ${SERVER} localhost:7272 ${BROWSER} Firefox ${DELAY} 0 ${VALID USER} demo ${VALID PASSWORD} mode ${LOGIN URL} http://${SERVER}/ ${WELCOME URL} http://${SERVER}/welcome.html ${ERROR URL} http://${SERVER}/error.html *** Keywords *** Open Browser To Login Page Open Browser ${LOGIN URL} ${BROWSER} Maximize Browser Window Set Selenium Speed ${DELAY} Login Page Should Be Open Title Should Be Login Page Go To Login Page Go To ${LOGIN URL} Login Page Should Be Open Input Username [Arguments] ${username} Input Text username_field ${username} Input Password [Arguments] ${password} Input Text password_field ${password} Submit Credentials Click Button login_button Welcome Page Should Be Open Location Should Be ${WELCOME URL} Title Should Be Welcome Page测试执行失败的示例测试执行成功的示例方法包名功能导入类型run()执行测试从机器人模块中导入 run 函数。run_cli()使用命令行参数运行测试。从机器人模块中导入运行命令行界面的函数。rebot()处理测试输出。从“机器人”模块中导入“rebot”函数。PytestPyTest 是一个基于 Python 的开放源代码测试框架用途广泛尤其适用于功能测试和 API 测试。PyTest的安装需要使用Pip。它支持对API、数据库和UI进行简单或复杂文本代码测试。简单的语法有助于轻松执行测试。拥有丰富的插件并且能够并行运行测试。可以运行任何特定的测试子集。import pytest //Import unittest module// def test_file1_method(): //Function inside class// x5 y6 assert x1 y,quot;test failedquot;要运行测试请使用“py.test”命令。截图供参考方法:函数参数工作pytest.approx()expected,relNone,absNone,nan_okFalse断言两个数字或两个表达式相等。pytest.fail()msg (str)pytrace(bool)如果执行的测试明确失败则会显示相应的消息。pytest.skip()allow_module_level(bool)忽略显示的错误信息继续执行测试。pytest.exit()msg (str)returncode (int)退出测试流程。pytest.main()argsNonepluginsNone一旦进程内的测试执行完成就返回退出代码。pytest.raises()expected_exception: Expectation[, match]断言一个代码块的调用将引发预期的异常expected_exception或引发一个失败异常failure exception。pytest.warns()expected_warning: Expectation[, match]使用这些函数时请注意警告信息。UnittestUnittest 是第一个基于 Python 的自动化单元测试框架旨在与 Python 标准库一起使用。支持重用测试套件和测试组织。它借鉴了 JUnit 的设计支持包括测试集合、测试独立性、测试用例的设置代码等在内的自动化测试。Unittest的使用步骤如下在程序代码中导入 unittest 模块。你可以自己定义一个类。在定义的类中创建函数。将“unittest.main()”放置在代码的底部以运行测试用例。import unittest //Import unittest module// def add(x,y): return x y class Test(unittest.TestCase): //Define your class with testcase// def addition(self): self.assertEquals(add(4,5),9)lt;stronggt;//Function inside class// if __name__ __main__: unittest.main()lt;stronggt;//Insert main() method//执行结果方法:方法作用setUp()在测试方法执行之前被调用用于准备测试环境。tearDown()在测试方法执行完毕后调用即使测试抛出了异常。setUpClass在单个类的测试之后调用。tearDownClass()在单个类的测试之后调用。run()运行带有结果的测试。debug()运行测试但未产生结果。addTest(在测试套件中添加测试方法。Discover()从指定目录中查找所有测试模块所在的子目录。assertEqual(a,b)用来测试两个对象是否相等。asserTrue/assertFalse(condition)测试布尔条件。DocTestDoctest 是 Python 标准分发版中包含的一个模块用于白盒单元测试。它会搜索交互式 Python 会话以检查是否完全按照所需的方式运行。它利用了Python的一些特定功能如文档字符串、Python交互式 shell 和 Python 反向调用在运行时确定对象的属性。核心功能:更新文档字符串执行回归测试函数 testfile() 和 testmod() 用于提供基本的接口。例子:def test(n): import math if not n gt; 0: raise ValueError(quot;n must be gt; 0quot;) //number should be 0 or greater than 0 if math.floor(n) ! n: raise ValueError(quot;n must be exact integerquot;) //Error when number is not an integer if n1 n: raise OverflowError(quot;n too largequot;) //Error when number is too large r 1 f 2 while f lt; n: //Calculate factorial r * f f 1 return r if __name__ quot;__main__quot;: import doctest //Import doctest doctest.testmod() //Calling the testmod method函数参数doctest.testfile()filename (mendatory)[, module_relative][, name][, package][, globs][, verbose][, report][, optionflags][, extraglobs][, raise_on_error][, parser][, encoding]doctest.testmod()m][, name][, globs][, verbose][, report][, optionflags][, extraglobs][, raise_on_error][, exclude_empty]Nose2Nose2 是 Nose 的继任者它是一个基于 Python 的单元测试框架可以运行文档测试和单元测试。Nose2 基于 unittest因此它也被称为扩展 unittest 或带有插件的 unittest该插件旨在使测试更加简单和容易。Nose2 支持多种编写测试和捕获异常的方法。Nose2 支持将包、类、模块和复杂的初始化代码一次性定义而不是频繁地编写代码。例子from mynum import * import nose def test_add_integers(): assert add(5, 3) 8 def test_add_floats(): assert add(1.5, 2.5) 4 def test_add_strings(): nose.tools.assert_raises(AssertionError, add, paul, carol) // To throw one of the expected exception to pass if __name__ __main__: nose.run()方法参数作用nose.tools.ok_(expr, msg None)断言的快捷方式。nose.tools.ok_(a,b, msg None)快速访问“断言 a 等于 b”的方法是 assert a bnose.tools.make_decorator(func)为给定函数复制元数据。nose.tools.raises(*exception)抛出预期的异常。nose.tools.timed(limit)指定测试应在多长时间内通过。nose.tools.with_setup(setupNone, teardownNone)为测试函数添加设置方法。nose.tools.intest(func)函数可以被称作测试。nose.tools.nottest(func)函数不能作为测试对象。TestifyTestify 是用来替代 unittest 和 nose 的。与 unittest 相比Testify 具有更多高级功能。执行自动化单元、集成和系统测试更易于提供测试证明。from testify import * class AdditionTestCase(TestCase): class_setup def init_the_variable(self): self.variable 0 setup def increment_the_variable(self): self.variable 1 def test_the_variable(self): assert_equal(self.variable, 1) suite(disabled, reasonticket #123, not equal to 2 places) def test_broken(self): # raises AssertionError: 1 !~ 1.01 assert_almost_equal(1, 1.01, threshold2) teardown def decrement_the_variable(self): self.variable - 1 class_teardown def get_rid_of_the_variable(self): self.variable None if __name__ quot;__main__quot;: run()包名作用引用assert提供全面的系统测试工具。import github.com/stretchr/testify/assertmock可以用来测试对象和调用。import github.com/stretchr/testify/mockrequire与 assert 相同但在测试失败时会停止执行。import github.com/stretchr/testify/requiresuite创建测试套件和方法。import github.com/stretchr/testify/suite最后下方这份完整的软件测试 视频教程已经整理上传完成需要的朋友们可以自行领取【保证100%免费】​​​软件测试面试文档我们学习必然是为了找到高薪的工作下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料并且有字节大佬给出了权威的解答刷完这一套面试资料相信大家都能找到满意的工作。

更多文章