常州网站建设外包手机商场网站制作
news/
2025/9/30 23:13:08/
文章来源:
常州网站建设外包,手机商场网站制作,网站设计版权,网站不备案会怎...#x1f4e2;专注于分享软件测试干货内容#xff0c;欢迎点赞 #x1f44d; 收藏 ⭐留言 #x1f4dd; 如有错误敬请指正#xff01;#x1f4e2;交流讨论#xff1a;欢迎加入我们一起学习#xff01;#x1f4e2;资源分享#xff1a;耗时200小时精选的「软件测试」资… 专注于分享软件测试干货内容欢迎点赞 收藏 ⭐留言 如有错误敬请指正交流讨论欢迎加入我们一起学习资源分享耗时200小时精选的「软件测试」资料包 最困难的时候也就是我们离成功不远的时候 “ Python为开发者提供了内置的单元测试框架 unittest它是一种强大的工具能够有效地编写和执行单元测试。unittest 提供了完整的测试结构支持自动化测试的执行能够对测试用例进行组织并且提供了丰富的断言方法。最终unittest 会生成详细的测试报告这个框架非常简单且易于使用。”
unittest核心概念
在 unittest 中有四个核心概念 TestCase测试用例每个测试用例实例用于封装一个或多个测试函数。 TestSuite测试套件这是多个测试用例的集合用于组织和执行多个测试用例。 TestLoader测试加载器这是一个用于将测试用例加载到测试套件中的工具。 TextTestRunner测试运行器这是用于执行测试用例的运行器负责运行测试并生成结果报告。 Fixture环境管理机制这是测试用例的环境搭建和销毁部分包括前置条件和后置条件。 unittest的工作流程
编写继承自 unittest.TestCase 的测试用例类其中每个测试函数都是一个独立的测试用例。使用 TestLoader 加载测试用例并将它们组织成 TestSuite 对象。使用 TestRunner 运行 TestSuite 中的测试用例并输出测试结果。 使用unittest初级指南
导入 unittest 模块以及被测试的文件或类。创建一个测试类并继承 unittest.TestCase所有自定义的单元测试类都要继承它作为基类。重写 setUp 和 tearDown 方法用于初始化和清理测试环境如果有必要。定义测试函数函数名以 test_ 开头这样才能被识别并执行。在测试函数中使用断言来判断测试结果是否符合预期。调用 unittest.main() 方法运行测试用例按照函数名的排序执行测试。
以下是一个简单的例子
import unittestdef login(username, password):if username kira and password 123:res {code: 200, msg: 登录成功}return resreturn {code: 400, msg: 登录失败}class TestLogin(unittest.TestCase):def test_login_success(self):测试登录成功test_data {username: kira, password: test}expect_data {code: 200, msg: 登录成功}res login(**test_data)self.assertEqual(res, expect_data)def test_login_error_with_error_password(self):账号正确密码错误登录失败test_data {username: kira, password: 12345}expect_data {code: 400, msg: 登录失败}res login(**test_data)self.assertEqual(res, expect_data)# 更多测试函数类似...if __name__ __main__:unittest.main()
以上是一个简单的测试用例包含了两个测试函数。运行脚本将输出测试结果。
unittest核心概念
测试脚手架
测试脚手架 是测试用例的前置条件和后置条件确保测试环境的初始化和清理从而保证测试的准确性和可靠性。
import unittestclass MyTestCase(unittest.TestCase):classmethoddef setUpClass(cls):# 类级别的前置条件设置整个类运行最先只执行一次print(setUpClass)classmethoddef tearDownClass(cls):# 类级别的后置条件清理整个类运行最后结束执行一次print(tearDownClass)def setUp(self):# 测试方法级别的前置条件设置所有测试方法运行前都执行一次print(setUp)def tearDown(self):# 测试方法级别的后置条件清理所有测试方法运行结束都执行一次print(tearDown)def test_example(self):# 测试用例print(test_example)if __name__ __main__:unittest.main()
setUp()每个测试方法运行前执行用于测试前置的初始化工作。tearDown()每个测试方法结束后执行用于测试后的清理工作。setUpClass()所有的测试方法运行前执行用于单元测试类运行前的准备工作。使用 classmethod 装饰器装饰整个测试类运行过程中只会执行一次。tearDownClass()所有的测试方法结束后执行用于单元测试类运行后的清理工作。使用 classmethod 装饰器装饰整个测试类运行过程中只会执行一次。
测试用例
测试用例 是最小的测试单元用于检测特定的输入集合的特定的返回值。unittest 提供了 TestCase 基类所有的测试类都需要继承该基类而在该类下的函数如果以 test_ 开头则被标识为测试函数
class MyTestCase(unittest.TestCase):def test_addition(self):result 2 3self.assertEqual(result, 5) # 使用断言方法验证结果是否相等def test_subtraction(self):result 5 - 3self.assertTrue(result 2) # 使用断言方法验证结果是否为True# 更多测试用例函数...
断言方法
以下是常用的断言方法 assertEqual(a, b, msgNone)验证 a 等于 b。 assertNotEqual(a, b)验证 a 不等于 b。 assertTrue(x)验证 x 是否为 True。 assertFalse(x)验证 x 是否为 False。 assertIs(a, b)验证 a 是否是 b。 assertIsNot(a, b)验证 a 是否不是 b。 assertIsNone(x)验证 x 是否为 None。 assertIsNotNone(x)验证 x 是否不为 None。 assertIn(a, b)验证 a 是否在 b 中。 assertNotIn(a, b)验证 a 是否不在 b 中。 assertIsInstance(a, b)验证 a 是否是 b 类型的实例。 assertNotIsInstance(a, b)验证 a 是否不是 b 类型的实例。
可以使用这些方法进行断言也可以直接使用原生的assert来断言如果断言失败测试用例会被定义为执行失败。
忽略特定测试方法
unittest 提供了一些方法来跳过特定的测试用例 unittest.skip(reason)强制跳过reason 是跳过的原因。 unittest.skipIf(condition, reason)当 condition 为 True 时跳过。 unittest.skipUnless(condition, reason)当 condition 为 False 时跳过。 unittest.expectedFailure如果测试失败这个测试用例不会计入失败的统计。 使用实例方法self.skipTest() 使用和上述类似。
import sys
import unittestclass Test1(unittest.TestCase):unittest.expectedFailure # 即使失败也会被计为成功的用例def test_1(self):assert 1 1 3unittest.skip(无条件跳过) # 不管什么情况都会进行跳过def test_2(self):print(22..., 4)unittest.skipIf(sys.platform win32, 跳过) # 如果系统平台为 Windows 则跳过def test_3(self):print(33..., 6)unittest.skipUnless(sys.platform win32, 跳过) # 除非系统平台为 Windows否则跳过def test_4(self):print(44..., 8)def test_5(self):self.skipTest(跳过)print(55..., 10)if __name__ __main__:unittest.main(verbosity2)
测试套件
测试套件用于收集和组织多个测试用例便于集中执行。 通过 unittest.main() 方法直接加载单元测试的测试模块这是一种简单的加载方式。所有测试用例的执行顺序按照方法名的字符串表示的 ASCII 码升序排序通过命名时使用 test_01_xxx 来指定执行顺序。 将所有的单元测试用例 TestCase 加载到测试套件 Test Suite 集合中然后一次性加载所有测试对象。
通过 TestSuite 对象收集
此方式适用于需要自定义组合特定测试用例的情况。
import unittestclass MyTestCase(unittest.TestCase):def test_addition(self):result 2 3self.assertEqual(result, 5)def suite():suite unittest.TestSuite()suite.addTest(MyTestCase(test_addition))return suiteif __name__ __main__:runner unittest.TextTestRunner()runner.run(suite())
通过 TestLoader 对象收集
TestLoader 是 unittest 框架提供的加载测试用例的类。
import unittestif __name__ __main__:loader unittest.defaultTestLoader# 自动加载当前模块中所有以 test_ 开头的测试用例函数suite loader.loadTestsFromModule(__name__)runner unittest.TextTestRunner()runner.run(suite)
import unittestclass MyTestCase(unittest.TestCase):def test_addition(self):result 2 3self.assertEqual(result, 5)if __name__ __main__:loader unittest.defaultTestLoader# 自动加载 MyTestCase 类中的所有测试用例suite loader.loadTestsFromTestCase(MyTestCase)runner unittest.TextTestRunner()runner.run(suite)
import unittestif __name__ __main__:loader unittest.defaultTestLoader# 自动加载指定名称的测试用例suite loader.loadTestsFromName(module.MyTestCase.test_addition)runner unittest.TextTestRunner()runner.run(suite)
import unittestif __name__ __main__:loader unittest.defaultTestLoader# 自动发现并加载指定目录中的测试用例模块suite loader.discover(start_dirtest_directory, patterntest_*.py, top_level_dirNone)runner unittest.TextTestRunner()runner.run(suite)
测试运行器
测试运行器是用于执行和输出测试结果的组件。常用的运行器有
unittest.TextTestRunner这是 unittest 框架中默认的测试运行器会在命令行输出测试结果。通过调用 run() 方法运行测试套件并将测试结果打印到控制台。
import unittestif __name__ __main__:loader unittest.defaultTestLoadersuite loader.discover(start_dirtests, patterntest_*.py)runner unittest.TextTestRunner()result runner.run(suite)
HTMLTestRunner这是一个第三方库能够生成漂亮的 HTML 测试报告需要进行安装。你可以通过搜索获取相关文件进行安装。
import unittest
from HTMLTestRunner import HTMLTestRunnerif __name__ __main__:loader unittest.defaultTestLoadersuite loader.discover(start_dirtests, patterntest_*.py)with open(test_report.html, wb) as report_file:runner HTMLTestRunner(streamreport_file, titleTest Report, descriptionTest Results)result runner.run(suite)XMLTestRunner这是另一个第三方库用于生成 XML 格式的测试报告。
import unittest
from xmlrunner import XMLTestRunnerif __name__ __main__:loader unittest.defaultTestLoadersuite loader.discover(start_dirtests, patterntest_*.py)with open(test_report.xml, wb) as report_file:runner XMLTestRunner(outputreport_file)result runner.run(suite)
你也可以自定义测试运行器。继承 unittest.TestRunner 类并实现 run() 方法以创建自己的测试运行器。
import unittestclass MyTestRunner(unittest.TextTestRunner):def run(self, test):print(Running tests with MyTestRunner)result super().run(test)return resultif __name__ __main__:loader unittest.defaultTestLoadersuite loader.discover(start_dirtests, patterntest_*.py)runner MyTestRunner()result runner.run(suite)
通常使用 HTMLTestRunner 即可满足需求它非常易用。
实战一个测试案例
假设有一个测试函数 login
# login.py
def login(username, password):模拟登录校验if username kira and password 123456:return {code: 0, msg: 登录成功}else:return {code: 1, msg: 账号或密码不正确}
设计用例
根据函数的参数和逻辑设计如下用例 编写测试用例并运行
import unittest
from login import loginclass TestLogin(unittest.TestCase):def test_login_correct(self):测试账号密码正确test_data {username: kira, password: 123456}expect_data {code: 0, msg: 登录成功}res login(**test_data)self.assertEqual(res, expect_data)def test_login_wrong_password(self):测试账号正确密码不正确test_data {username: kira, password: 123}expect_data {code: 1, msg: 账号或密码不正确}res login(**test_data)self.assertEqual(res, expect_data)def test_login_wrong_username(self):测试账号错误密码正确test_data {username: kir, password: 123456}expect_data {code: 1, msg: 账号或密码不正确}res login(**test_data)self.assertEqual(res, expect_data)if __name__ __main__:unittest.main()
这是一个简单的测试用例包含了三个测试函数。运行测试用例后会输出测试结果看完是否觉得unittest非常简单易用。ner.run(suite)
最后的分享 如果你想学习自动化测试那么下面这套视频应该会帮到你很多 如何逼自己1个月学完自动化测试学完即就业小白也能信手拈来拿走不谢允许白嫖.... 最后我这里给你们分享一下我所积累和整理的一些文档和学习资料有需要直接领取就可以了 以上内容对于软件测试的朋友来说应该是最全面最完整的备战仓库了为了更好地整理每个模块我也参考了很多网上的优质博文和项目力求不漏掉每一个知识点很多朋友靠着这些内容进行复习拿到了BATJ等大厂的offer这个仓库也已经帮助了很多的软件测试的学习者希望也能帮助到你。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923337.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!