一、unittest是一个Python的单元测试框架,可以帮我们完成接口自动化测试、UI自动化测试
一个使用unittest框架的自动化测试用例代码如下:
test_baidu.py
'''
Created on 2017-6-14
@author: 灵枢
Project:百度测试用例
'''
from selenium import webdriver
import unittest, time
class BaiduTest (unittest.TestCase) :
def setUp (self) :
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(30 )
self.base_url = "https://www.baidu.com"
def test_baidu_search (self) :
u"""百度搜索"""
driver = self.driver
driver.get(self.base_url + "/" )
driver.find_element_by_id("kw" ).clear()
driver.find_element_by_id("kw" ).send_keys("unittest" )
driver.find_element_by_id("su" ).click()
time.sleep(3 )
title=driver.title
self.assertEqual(title, u"unittest_百度搜索" )
def test_baidu_set (self) :
u"""百度设置"""
driver=self.driver
driver.get(self.base_url+"/gaoji/preferences.html" )
m=driver.find_element_by_name("NR" )
time.sleep(1 )
m.find_element_by_xpath("//option[@value='50']" ).click()
time.sleep(1 )
def tearDown (self) :
self.driver.quit()
if __name__ == "__main__" :
suite = unittest.TestSuite()
suite.addTest(BaiduTest("test_baidu_search" ))
suite.addTest(BaiduTest("test_baidu_set" ))
runner = unittest.TextTestRunner()
runner.run(suite)
二、代码解释
首先,通过import导入unittest测试框架。创建BaiduTest 类继承unittest.TestCase 类,从 TestCase 类继承是告诉 unittest 这是一个测试用例。
setUp ()方法用于设置初始化的部分,如初始化变量、打开浏览器等,在测试用例执行前,这个方法中的函数将先被调用。
tearDown()方法用例测试用例执行之后的善后工作,如清除数据、关闭文件、关闭浏览器等。
unittest要求测试用例必须以“test”开头。如test_baidu_search、test_baidu_set。
接下来,调用unittest.TestSuite()类的addTest()方法向测试套件中添加测试用例
最后,通过unittest.TextTestRunner()类的run()方法运行测试套件中的测试用例
如果想直接运行当前测试文件中的所有测试用例,则可以直接使用unittest提供的main()方法。只需在if name == “main “:下面写unittest.main()就行了。
三、批量执行测试用例
这里还有一个搜狗搜索的测试用例,如下:
test_sogou.py
'''
Created on 2017-6-14
@author: 灵枢
Project:搜狗搜索测试用例
'''
from selenium import webdriver
import unittest, time
class SogouTest (unittest.TestCase) :
def setUp (self) :
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(30 )
self.base_url = "http://www.sogou.com"
def test_sogou (self) :
u"""搜狗搜索"""
driver = self.driver
driver.get(self.base_url + "/" )
driver.find_element_by_id("query" ).clear()
driver.find_element_by_id("query" ).send_keys(u"python3" )
driver.find_element_by_id("query" ).submit()
time.sleep(3 )
title = driver.title
self.assertEqual(title, u"python2 - 搜狗搜索" )
def tearDown (self) :
self.driver.quit()
if __name__ == "__main__" :
unittest.main()
如果想同时执行test_baidu.py和test_sogou.py,可以新建一个类用于批量执行测试用例:
all_search_tests.py
'''
Created on 2017-6-14
@author: 灵枢
Project:批量执行测试用例
'''
import HTMLTestRunner
import unittest
import os,time
test_case_dir = "E:\\selenium_use_case\\test_case"
def get_test_suite () :
testsunit=unittest.TestSuite()
discover=unittest.defaultTestLoader.discover(test_case_dir,pattern='test_*.py' ,top_level_dir=None )
for test_suite in discover:
for test_case in test_suite:
testsunit.addTests(test_case)
print(testsunit)
return testsunit
if __name__ == '__main__' :
runner = unittest.TextTestRunner()
runner.run(get_test_suite())