环境搭建
pip install -U pytest
pip install -U unittest
pip install -U selenium
unittest单元测试框架
所有组件
-
Test Fixture 测试夹具 : 准备工作和收尾
-
Test Case 测试用例 : 通过assert来验证最小的测试单元,创建测试用例
-
Test Suite 测试套件 : 多个测试用例的集合
-
Test Runner 测试执行器 : 负责测试执行调度并且生成测试结果给用户
-
Test Report 测试报告 : 成功或者失败的汇总,预期结果和实际结果,还有运行情况和时间汇总
TestCase类
首先引入unittest, 引入一个继承TestCase的子类
import unittest from selenium
import webdriver
class SearchTest (unittest.TestCase):
setUp()方法
一个测试用例是从setUp()开始的,可以进行一些初始化任务,比如创建浏览器和访问URL,加载测试数据和打开日志文件。
class SearchTest (unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.implicity_wait(30)
self.driver.maximize_window()
self.driver.get("你需要访问的网址")
编写测试
def test_search_by_name(self):
self.search_box = self.driver.find_element("css selector", "input[name='wd']")
self.search_box.clear()
self.search_box.send_keys("phones")
self.search_box.send_keys(Keys.ENTER)
self.driver.implicitly_wait(5)
search_results = self.driver.find_elements("css selector", "div.result")
self.assertAlmostEqual(8, len(search_results))
代码清理
def tearDown(self):
self.driver.quit()
运行测试
if __name__ == '__main__':
unittest.main(verbosity=2)
在 unittest.main() 中使用 verbosity 参数来控制测试运行时的详细程度。其中,参数值 2 表示最详细的输出级别。
具体而言,unittest 测试框架在执行测试时会根据不同的 verbosity 值输出不同级别的信息:
-
0:仅输出测试结果的总结,即运行的测试用例的总数和失败的数量。
-
1:在 0的基础上,输出每个测试用例的简要摘要,包括用例名称和结果。
-
2:在 1的基础上,输出更详细的信息,包括每个测试用例的详细执行结果和日志。
因此,当使用 verbosity=2 时,测试框架将会输出最详细的信息,包括每个测试用例的详细结果、日志等,有助于在测试过程中进行更全面的调试和分析。
需要注意的是,在实际的测试运行中,根据你的需要可以选择不同的 verbosity 值以获得适当的输出详细程度。默认情况下,unittest.main() 的 verbosity 值为 1,可以根据需要进行自定义设置。
【注意】添加其他测试 也要以test开头
类级别的setUp()方法和tearDown()方法
其实每次都会打开一个浏览器来执行测试,可以通过testSetUp() testTearDown() 和 classmethod来实现。
以类级别初始化数据,每个测试方法共享
import unittest
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
class SearchTests (unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Chrome()
cls.driver.implicitly_wait(5)
cls.driver.maximize_window()
cls.driver.get("某度网址")
def test_search_by_category(self):
self.search_box = self.driver.find_element("css selector", "input[name='wd']")
self.search_box.clear()
self.search_box.send_keys("phones")
self.search_box.send_keys(Keys.ENTER)
self.driver.implicitly_wait(5)
search_results = self.driver.find_elements("css selector", "div.result")
self.assertAlmostEqual(8, len(search_results))
@classmethod
def tearDown(cls):
cls.driver.quit()
if __name__ == '__main__':
unittest.main(verbosity=2)
断言
常见的断言使用方法如下
-
assertEqual
-
assertAlmostEqual
-
assertLessEqual
测试套件
应用unittest的TestSuites特性,可以将不同的测试组成一个逻辑组
通过TestSuites\TestLoader\TestRunner类实现的
例如:新增一个HomePageTest类
smoketests.py
import unittest
from searchtests import SearchTest
from homepagetests import HomePageTest
search_tests = unittest.TestLoader().loadTestsFromTestCase(SearchTest)
home_page_tests = unittest.TestLoader().loadTestsFromTestCase(HomePageTest)
somke_tests = unittest.TestSuite([search_tests, home_page_tests])
unittest.TextTestRunner(verbosity=2).run(smoke_tests)
运行测试组冒烟测试
python smoketests.py
生成HTML格式的测试报告
需要手动下载这个文件
[HTMLTestRunner.py]
【注意】可能会有一行报错
self.stream.write(output.encode('utf8'))
需改成 self.stream.write(str(output))
完整的测试方法htmlsmoketests.py如下
import unittest
import HTMLTestRunner
from test_sample import SearchTests
import os
dir = os.getcwd()
search_tests = unittest.TestLoader().loadTestsFromTestCase(SearchTests)
smoke_tests = unittest.TestSuite([search_tests])
outfile = open(dir + '\SmokeTestReport.html', 'w')
runner = HTMLTestRunner.HTMLTestRunner(
stream = outfile,
title = 'Test Report',
description = 'Smoke Tests'
)
runner.run(smoke_tests)
这样就可以在网页中看到结果啦~
【参考资料】Selenium自动化测试--基于Python语言