您的位置:首页 > 编程语言 > Python开发

Python-unittest测试框架

2017-06-28 17:57 615 查看

一、unittest是一个Python的单元测试框架,可以帮我们完成接口自动化测试、UI自动化测试

一个使用unittest框架的自动化测试用例代码如下:

test_baidu.py


# coding=utf-8
'''
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) #隐性等待时间为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__":
# unittest.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


# coding=utf-8
'''
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) #隐性等待时间为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


#coding=utf-8
'''
Created on 2017-6-14
@author: 灵枢
Project:批量执行测试用例
'''
import HTMLTestRunner
import unittest
import os,time

test_case_dir = "E:\\selenium_use_case\\test_case"  #test_baidu.py和test_sogou.py都放在该目录下
def get_test_suite():
testsunit=unittest.TestSuite()
#在listaa目录下查找以test开头的python文件
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())
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息