尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Python 5 个自动测试库,提升效率

Python 5 个自动测试库,提升效率 自带的测试工具数量不少, 第三方生态发展得非常成熟。要是选对了能够节省诸多的事项, 要是选错了反倒会增添负担。下面依据使用场景来介绍5个各有长处的测试库。于当下而言, 是社区之中获得最多使用量的测试框架。它具备兼容性, 然而其语法更为简洁, 并且功能也更为强大。其中包含参数化测试、夹具系统以及插件生态, 这些方面一应俱全。具有这样几个特点, 其一, 测试函数只要是以 test_ 开始就能被自动发觉到, 并不需要去继承任何类来达成其二, 借助 . 去管理测试的时候所涉及的前置以及后置条件其三, 运用 .mark. 这个操作可给同一个测试功能传入多组不同的数据还有, 断言直接书写就好, 当出现失败情况时会自动去输出差异方面的信息。对于几乎所有的项目皆适用尤其是在存在以下情形之时, 即有的项目需要复杂的测试装置, 有的项目需要进行参数化, 又或者有的项目要接入覆盖率, 还有的项目要接入并行测试等插件。# test_math_operations.py importpytest defadd(a, b): returnab pytest.mark.parametrize(a, b, expected, [ (1, 2, 3), (0, 0, 0), (-1, 1, 0), ]) deftest_add(a, b, expected): assertadd(a, b) expected pytest.fixture defsample_list(): return [1, 2, 3] deftest_list_length(sample_list): assertlen(sample_list) 3运行 .py -v它属于标准库自行携带的测试框架, 于设计方面参照了 JUnit。其结构相对严谨, 具体表现为: 测试类需要继承某样东西, 测试方法要以 test_ 作为起始, 借助 setUp 以及 对每个测试的生命周期展开管理。声称断定的办法极为周全, 多达几十种数目。这是由于它属于标准库范畴, 所以IDE在对其的支持这方面普遍较好。适宜团队已然存在使用习惯的项目, 或者是需要与标准库工具链进行深度融合的项目。# test_string_methods.py importunittest classTestStringMethods(unittest.TestCase): defsetUp(self): self.test_string Hello World deftest_upper(self): self.assertEqual(self.test_string.upper(), HELLO WORLD) deftest_isupper(self): self.assertTrue(HELLO.isupper()) self.assertFalse(Hello.isupper()) deftest_split(self): self.assertEqual(self.test_string.split(), [Hello, World]) withself.assertRaises(TypeError): self.test_string.split(2) if__name__ __main__: unittest.main()其思路相当独特, 测试用例直接书写于函数的文档字符串当中, 格式呈现为交互式会话的模样。在运行之际, 它会将这些示例提取出来加以执行, 以此查看输出是否相符。好处在于, 将撰写文档与编写测试二者合一, 文档当中的代码不会出现过时的情况。耗费就是在适用的范围上面仅仅涵盖较为简便的测试场景, 面对复杂的逻辑状况依旧得依靠正式的测试框架。适合用来给库或者模块撰写能够进行验证的示例文档, 又或者是给简单的函数迅速补充几个测试。# my_module.py deffactorial(n): 计算阶乘。 factorial(5) 120 factorial(1) 1 factorial(0) 1 factorial(-1) Traceback (most recent call last): ... ValueError: n must be 0 ifn0: raiseValueError(n must be 0) result 1 foriinrange(2, n1): result * i returnresult if__name__ __main__: importdoctest doctest.testmod(verboseTrue)采用的是“基于属性的测试”这种思路, 你并非要逐个去撰写测试用例, 而是先要界定输入数据的规则, 还要明确代码所需满足的属性, 之后借助这些来自动生成数量众多的随机数据, 当中涵盖各种边界值, 以此来进行验证。它具备发现边界情况的能力, 这种边界情况是开发者在手动编写测试时极难想到的, 进而能够降低测试代码的数量。它能够与“和”配合使用, 也能够与“或”配合使用。更适宜于去测试算法, 以及数据处理函数, 还有解析器, 这类针对输入输出有着明确规则的相关代码。# test_encoding.py fromhypothesisimportgiven, strategiesasst importcodecs given(st.text()) # 策略生成任意文本 deftest_encode_decode_invariant(text): 属性任何字符串经过 utf-8 编码再解码后应得到原字符串。 encoded text.encode(utf-8) decoded encoded.decode(utf-8) assertdecoded text given(st.integers(), st.integers()) deftest_addition_commutative(a, b): 属性加法满足交换律。 assertab ba运行 .py1. 它可谓是用于进行Web应用端对端测试的老牌工具, 2. 它能够驱动主流浏览器, 3. 像 、、Edge这些浏览器, 4. 它还可以模拟真实用户的操作, 比如点击, 再比如输入, 还有页面跳转等。值得留意的是, 在进行测试期间, 需要去下载与相应浏览器相对应的。代码自身并非复杂, 然而维护所需成本很高: 一旦页面结构产生改变, 选择器或许就需要随之进行调整。特别用以检测, Web 应用方面的前端功能, 其中囊括用户交互流程, 以及跨浏览器兼容性。# test_web_login.py fromseleniumimportwebdriver fromselenium.webdriver.common.byimportBy fromselenium.webdriver.common.keysimportKeys importtime deftest_login_to_website(): driver webdriver.Chrome() # 需要已安装 ChromeDriver try: driver.get(https://example.com/login) # 查找元素并交互 username_box driver.find_element(By.ID, username) password_box driver.find_element(By.ID, password) submit_button driver.find_element(By.XPATH, //button[typesubmit]) username_box.send_keys(test_user) password_box.send_keys(secure_password) submit_button.click() time.sleep(2) # 等待页面跳转 # 验证登录成功例如检查是否跳转到仪表盘页面 assertdashboardindriver.current_url print(登录测试通过) finally: driver.quit() # 关闭浏览器 if__name__ __main__: test_login_to_website()怎么选日常进行项目测试时, 其在很大程度上是首先被选用的, 原因在于它语法简单, 具备齐全的功能, 而且拥有许多插件。在测试过程中需要标准库以确保不存在依赖的情况是常用方式而采用它。想要使得文档里所存在的代码示例能够真实地得以运行, 添加相应内容是必要之举而加入它。要是担心边界情况存在遗漏测试, 有一种措施会弥补这种可能出现的状况而借助它。对于相关Web应用的界面测试而言, 其依然是占据主导地位的方案所在而选用它。实际的项目当中, 这几个常常是搭配着去使用的, 譬如用来运行测试, 又比如说在其中添加所具备属性的测试。并非需要全部学习, 依据项目的需求挑选两三个便足够用了。“无他惟手熟尔”有需要的用起来
返回列表