unittest,顾名思义就是一个单元测试框架,但是它不仅适用于单元测试,还适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果。
实例:
百度搜索界面测试用例Test Case:
1 # coding=utf-8 2 3 import unittest 4 from selenium import webdriver 5 import time 6 7 8 class TestBaiduUi(unittest.TestCase): 9 def setUp(self): 10 chromedriver = "C:Program FilesGoogleChromeApplicationchromedriver" 11 self.driver = webdriver.Chrome(chromedriver) 12 self.driver.implicitly_wait(30) # 隐性等待时间为30秒 13 self.base_url = "https://www.baidu.com" 14 15 def test_baidu(self): 16 driver = self.driver 17 driver.get(self.base_url + "/") 18 driver.maximize_window() 19 driver.find_element_by_id("kw").clear() 20 driver.find_element_by_id("kw").send_keys("unittest") 21 driver.find_element_by_id("su").click() 22 time.sleep(3) 23 # 对浏览器标题进行断言测试 24 title = driver.title 25 self.assertEqual(title, u"unittest_百度搜索") 26 27 def tearDown(self): 28 self.driver.quit() 29 30 31 if __name__ == "__main__": 32 unittest.main()
豆瓣界面测试用例Test Case:
1 # coding=utf-8 2 3 import unittest 4 from selenium import webdriver 5 import time 6 7 8 class TestDoubanUi(unittest.TestCase): 9 10 def setUp(self): 11 chromedriver = "C:Program FilesGoogleChromeApplicationchromedriver" 12 self.driver = webdriver.Chrome(chromedriver) 13 self.driver.implicitly_wait(30) # 隐性等待时间为30秒 14 self.base_url = "https://www.douban.com/" 15 16 def test_douban(self): 17 driver = self.driver 18 driver.get(self.base_url + "/") 19 driver.maximize_window() 20 driver.find_element_by_xpath('//*[@id="anony-nav"]/div[2]/form/span[1]/input').clear() 21 driver.find_element_by_xpath('//*[@id="anony-nav"]/div[2]/form/span[1]/input').send_keys("复仇者联盟三") 22 driver.find_element_by_xpath('//*[@id="anony-nav"]/div[2]/form/span[2]/input').click() 23 time.sleep(3) 24 # 对浏览器标题进行断言测试 25 title = driver.title 26 self.assertEqual(title, u"搜索: 复仇者联盟三") 27 28 def tearDown(self): 29 self.driver.quit() 30 31 32 if __name__ == "__main__": 33 unittest.main()
通过测试套件TestSuite来组装多个测试用例。
1 # coding=utf-8 2 3 import unittest 4 from com.action import test_baidu 5 from com.action import test_douban 6 import HTMLTestRunner 7 import time 8 9 # 构造测试集 10 suite = unittest.TestSuite() 11 suite.addTest(test_baidu.TestBaiduUi('test_baidu')) 12 suite.addTest(test_douban.TestDoubanUi('test_douban')) 13 14 if __name__ == '__main__': 15 # 执行测试 16 now = time.strftime("%Y-%m-%M-%H_%M_%S", time.localtime(time.time())) 17 fp = open("result" + now + ".html", 'wb') 18 runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title='UI界面测试', description=u'用例执行情况:') 19 runner.run(suite) 20 fp.close()
从上述运行实例可以看出:
一、TestSuite是多个测试用例集合在一起
二、runner定义测试报告格式,stream定义报告写入的二进制文件,title为报告的标题,description为报告的说明,runner.run()用来运行测试case,注意最后用fp.close()将文件关闭!!
三、用w或a模式打开文件的话,如果文件不存在,那么就自动创建。此外,用w模式打开一个已经存在的文件时,原有文件的内容会被清空因为一开始文件的操作的标记是在文件的开头的,这时候进行写操作,无疑会把原有的内容给抹掉。在模式字符的后面,还可以加上+ b t这两种标识,分别表示可以对文件同时进行读写操作和用二进制模式、文本模式(默认)打开文件。