单元测试框架(unittest)-selenium自动化测试

一:简介
1.unittest(PyUnit):具备创建测试用例,测试套件,测试夹具能力
Test Fixture(测试夹具):使用测试夹具可定义单个或多个在测试执行之前的准备工作和执行之后的清理工作
Test Case(测试用例):unittest中执行测试的最小单元,通过unittest提供的assert方法来验证一组特定的操作和输入以后得到的具体响应,提供一个名为TestCase的基础类,可用来创建测试用例,
Test Suite(测试套件):一个测试套件是多个测试或测试用例的集合,针对被测程序的对应功能和模块创建的一组测试,一个测试套件内的测试用例将一起执行。
Test Runner(测试执行器):负责测试执行调度并且生成测试结果给用户,可使用图形界面,文本界面或者特定的返回值来展示测试执行结果。
Test Report(测试报告):展示所有执行用例的成功或者失败状态的汇总。
2.xUnit测试框架与unittest类似
分为3部分:Arrange:初始化测试前置条件
Act:执行功能操作
Assert:校验实际结果与预期结果是否一致
二:TestCase类
1.使用方法:通过继承testcase并且在测试类中为每一个测试添加测试方法来创建单个测试或一组测试,为创建测试,使用testcase类中assert方法,每个测试任务是调用assertEqual()来校验预期结果,调用assertTrue()来验证条件,或者调用assertRaises()来验证预期的异常。
除了添加测试,还可添加测试夹具-setUP()方法和tearDown()方法,创建或处置测试用例所需要的任何对象和条件
使用unittest,通过继承testcase类然后添加一个测试方法
2.unittest
#引入unittest模块
import unittest
from selenium import webdriver
#定义一个继承testcase类的子类
class SearchTest(unittest.TestCase):
#setup()方法:测试前的初始化,此方法没有参数而且不返回任何值
def setUp(self):
#创建chrome浏览器
self.driver=webdriver.Chrome()
self.driver.implicitly(30)
self.driver.maxmize_window()
#访问某个网页
self.driver.get(“http://www.imooc.com/”)
#给测试方法命名为test开头,这种命名约定通知test runner哪个方法代表测试方法,
assertEqual()方法来验证程序搜索该术语返回的结果是否和预期结果相匹配
def test_search_by_category(self):
#输入搜索文本 self.search_field=self.driver.find_element_by_class_name(“search-input”)
self.search_field.clear()
#用send_keys()方法输入新的特定值,用submit()方法提交搜索请求
self.search_field.send_keys(“python”)
self.search_field.submit()
#获得所搜课程数是否与判断一致
courses=self.driver.find_elements_by_xpath()
self.assertEqual(2,len(courses))
#tearDown:清理所有初始化值,关闭窗口
@classmethod
def tearDown(self):
self.driver.quit()
为了通过命令行运行测试,可在测试用例中添加对main方法调用,使用verbosity参数以便使详细测试总量展示在控制台上
if name==‘main’:
unittest.main(verbosity=2)
#可把测试脚本保存为python脚本,用命令执行即可:python searchtest.py
测试结束后,unittest会把测试结果展示在控制台上
可通过使用setUpClass()方法和tearDownClass()方法及@classmethod标识来实现类级别初始化
三:断言
unittest的TestCase类提供了很多实用的方法来校验预期结果和程序返回的实际结果是否一致,这些方法要求必须满足某些条件才能继续执行接下来的测试,例如等价校验,逻辑校验,异常校验,若断言通过了,接下来测试代码才会执行,相反测试停止并且给出异常信息。
单元测试框架(unittest)-selenium自动化测试
四:测试套件
应用unittest的TestSuites特性,将不同测试组成一个逻辑组,设置统一的测试套件,再通过一个命令执行测试。通过TestSuites,TestLoader,TestRunner
import unittest
from searchtests import SearchTests
from homepagetest import HomePageTests
#导入二个中所有测试
search_tests=unittest.TestLoader().loadTestFromTestCase(SearchTests)
home_page_tests=unittest.TestLoader().loadTestsFromTestCase(HomePageTest)
#创建一个测试套件结合二个测试
smoke_tests=unittest.TestSuite([home_page_tests,search_tests])
#执行测试套件
unittest.TextTestRunner(verbosity=2).run(smoke_tests)
TestLoader类:得到指定测试文件中所有测试方法且用于创建测试套件
TestRunner类:通过调用测试套件来执行测试中类
五:生成HTML格式测试报告
unittest在命令行输出测试结果,可用HTMLTestRunner实现