Python自动化测试框架之unittest使用详解

打印 上一主题 下一主题

主题 1034|帖子 1034|积分 3102

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
unittest是Python自动化测试框架之一,提供了一系列测试工具和接口,支持单元测试、功能测试、集成测试等多种测试类型。unittest使用面向对象的头脑实现测试用例的编写和管理,可以方便地扩展和定制测试框架,支持多种测试效果输出格式

1 unittest框架

unittest 是python 的单元测试框架,它主要有以下作用:
提供用例组织与执行:当你的测试用例只有几条时,可以不必考虑用例的组织,但是,当测试用例达到成百上千条时,大量的测试用例堆砌在一起,就产生了扩展性与维护性等题目,此时需要考虑用例的规范与组织题目了。单元测试框架就是来办理这个题目的。
提供丰富的比较方法:在用例执行完之后都需要将实际效果与预期效果进行比较(断言),从而断定用例是否可以顺遂通过。单元测试一样平常会提供丰富的断言方法。比方,判断相称/不相称、包含/不包含、True/False等断言方法。

提供丰富的日记:当测试用例执行失败时能抛出清楚的失败缘故原由,当所有效例执行完成后能提供丰富的执行效果。比方,总的执行时间,失败用例数,成功用例数等。
unittest内里有四个很紧张的概念,test fixture,test case,test suite,test runner。
Test Fixture
对一个测试用例环境的搭建和销毁,就是一个fixture,通过覆盖setUp()和tearDown()方法来实现。
setUp()方法可以进行测试环境的搭建,好比获取待测试欣赏器的驱动,或者如果测试中需要访问数据库,那么可以在setUp()中通过创建数据库毗连来进行初始化。

tearDown()方法进行环境的销毁,可以进行关闭欣赏器,关闭数据库毗连,清除数据库中产生的数据等操作;Test Case
一个TestCase的实例就是一个测试用例。测试用例就是一个完整的测试流程,包括测试前预备环境的搭建(setUp)、实现测试过程的代码,以及测试后环境的还原(tearDown)。单元测试(unit test)的本质就在这里,一个测试用例就是一个完整的测试单元,可以对某一个功能进行验证。Test Suite
一个功能的验证往往需要多个测试用例,可以把多个测试用例聚集在一起执行,这个就产生了测试套件TestSuite的概念。Test Suit用来将多个测试用例组装在一起;
Test Runner测试的执行也是非常紧张的一个概念,在unittest框架中,通过TextTestRunner类提供的run()方法来执行test suite/test case。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from selenium import webdriver
import unittest
import time
import os
from selenium.common.exceptions import NoAlertPresentException
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
class Baidu1(unittest.TestCase):
     def setUp(self):
         print("-----setUp-----")
         self.driver = webdriver.Chrome()
         self.url = "https://www.baidu.com/"
         self.driver.maximize_window()
         time.sleep(3)
     def tearDown(self):
         print("-----tearDown-----")
         self.driver.quit()
     def test_hao(self):
         print("111111111")
         driver = self.driver
         url = self.url
         driver.get(url)
         driver.find_element(By.LINK_TEXT,"hao123").click()
         time.sleep(6)
     def test_hbaidu(self):
         print("22222222")
         driver = self.driver
         url = self.url
         driver.get(url)
         driver.find_element(By.ID,"kw").send_keys("unittest")
         driver.find_element(By.ID,"su").submit()
         time.sleep(5)
         print(driver.title)
         # self.assertNotEqual(driver.title, "百度一下_百度搜索", msg="不相称")
         # self.assertTrue("beautiful"=="beauty", msg="Not Equal!")
         time.sleep(6)
     def saveScreenAsPhoto(self, driver, file_name):
         if not os.path.exists("./image"):
             os.makedirs("./image")
         now = time.strftime("%Y%m%d-%H%M%S", time.localtime(time.time()))
         driver.get_screenshot_as_file("./image/" + now + "-" + file_name)
         time.sleep(3)
         print("3333333")
if __name__ == "__main__":
     unittest.main()
这个脚本中的类 Baidu1 继续了unittest.TestCase类,以是它使用了unittest框架来组织测试用例(TestCase)。
setUp() 和 setDown() 是unittest框架中的测试固件。
以test_开头定名的方法,是测试方法,在运行整个类的时候会默认执行。
unittest提供了全局的main()方法,使用它可以方便地将一个单元测试模块变成可以直接运行的测试脚
本。main()方法搜索所有包含在该模块中以”test"定名的测试方法,并自动执行他们。

2 批量执行脚本


2.1 构建测试套件

当我们增加了被测试功能和相应的测试用例之后,我们就需要把多个测试用例组织在一起执行,这就需要用到上文中提到的测试套件Test Suite
假设我们已经编写了testbaidu1.py,testbaidu2.py两个文件
testbaidu2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
from selenium import webdriver
import unittest
import time
from selenium.common.exceptions import NoAlertPresentException
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
class Baidu2 (unittest.TestCase) :
     def setUp(self):
         self.driver = webdriver.Chrome()
         self.driver.implicitly_wait(30)
         self.base_url = "http://www.baidu.com/"
         self.driver.maximize_window()
         self.verificationErrors=[]
         self.accept_next_alert = True
     def tearDown(self):
         self.driver.quit()
         self.assertEqual([], self.verificationErrors)
     def test_hao(self):
         driver = self.driver
         driver.get(self.base_url)
         driver.find_element(By.LINK_TEXT,"新闻").click()
         

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

河曲智叟

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表