在执行一条自动化测试用例时需要做一些测试前的准备工作和测试后的清理工作,如:创建数据库链接、启动服务进程、打开文件、打开浏览器、测试环境的清理、关闭数据链接、关闭文件等。如果每执行一条用例都需要编写上面的代码就会造成代码的冗余,unittest包括一个特殊的hook,用来配置和清理测试所需的所有固件,可以将这些动作放在测试固件(test fixture)里。常用的测试固件方法有4个:

setUp()每个测试方法运行前执行。

tearDown()每个测试方法运行结束后运行。

setUpClass()所有的方法运行之前运行一次,整个测试类运行过程中只运行一次。

tearDownClass所有的测试方法结束之后运行以西,整个测试类运行过程中只运行一次。

 1 from appium import webdriver
2 from time import sleep
3 import unittest
4 from selenium.webdriver.support.expected_conditions import NoSuchElementException
5 from day05.email_location import EmailLocation
6
7 desired_capabilities = dict()
8 desired_capabilities["platformName"] = "Android"
9 desired_capabilities["platformVersion"] = "8.0"
10 desired_capabilities["deviceName"] = "android Emulator"
11 desired_capabilities["appPackage"] = "com.android.email"
12 desired_capabilities["appActivity"] = ".activity.setup.AccountSetupFinal"
13 desired_capabilities["newCommandTimeout"] = 200
14
15
16 class EmailTest(unittest.TestCase):
17
18 def setUp(self) -> None:
19 self.driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_capabilities)
20 self.driver.implicitly_wait(20)
21 self.lct = EmailLocation()
22
23 def tearDown(self) -> None:
24 self.driver.quit()
25
26 def data(self):
27 self.data1 = {"email": "zhaodongfeng@163.com"}
28
29 def test_case01(self):
30 try:
31 email = self.driver.find_element(*self.lct.email1)
32 self.data()
33 email.send_keys(self.data1["email"])
34 sleep(1)
35 next1 = self.driver.find_element(*self.lct.next)
36 next1.click()
37 sleep(3)
38 up = self.driver.find_element(*self.lct.up)
39 up.click()
40 sleep(1)
41 manual_setup = self.driver.find_element(*self.lct.manual_setup)
42 manual_setup.click()
43 sleep(2)
44
45 except NoSuchElementException as e1:
46 print("没有找到元素", e1)
47
48 finally:
49 print("用例执行完毕")
50
51
52 if __name__ == '__main__':
53 unittest.main()

setUp()方法时在众多测试方法的每个测试方法执行前先被调用执行的方法,而且每执行完一个测试方法都要从setUp方法调用开始后再执行下一个测试方法,有几个测试方法就调用它几次,与代码位置无关,放在哪里都是它先被调用。

tearDown()方法是在众多方法执行完毕后它才被执行,不管这个类里面有多少测试方法,它是在每执行完一个测试方法后被执行的,与书写位置无关,放在哪里都行;无论测试方法是否执行成功都执行tearDown()方法,如果setUp()方法执行失败,则认为这个测试项目失败,

不会执行测试方法也不执行tearDown()方法。执行过程如下:

setUp  -->  testcase_1 -->tearDown()  -->setUp()   -->  testcase_2  -->  tearDown()

因为每执行一个测试方法都会运行setUp()和tearDown(),所以运行效率较低。可以使用setUpClass()和tearDownClass()方法,实现如下过程。

setUp  -->  testcase_1 -->  testcase_2  -->  tearDown()

 1 class CircleOperation(unittest.TestCase):
2
3 @classmethod
4 def setUpClass(cls) -> None:
5 # 启动APP
6 cls.driver = StartApp().start_wtx_oppo()
7 cls.driver.implicitly_wait(6)
8 # 登录app
9 LoginApp(cls.driver).login()
10 cls.circle_homepage_lct = CircleHomepageLocation()
11 cls.post_invitation = EditInvitationLocation()
12
13 @classmethod
14 def tearDownClass(cls) -> None:
15 # 关闭APP
16 cls.driver.quit()
17
18 def test_case1(self):
19 pass
20
21 def test_case2(self):
22 pass

setUpClass()必须使用@classmethod装饰器,所有测试方法运行前运行一次,整个测试类运行过程中只运行一次。

tearDownClass()必须使用@classmethod装饰器,所有测试方法运行完后运行一次,整个测试类运行过程中执行一次。

setUpClass()和tearDownClass()方法会增加运行效率,但是用例之间的耦合度高,case与case之间必须有上下级关系,一旦某一条case执行失败,那么所有的case都会执行失败。

在appium里的setUp或setUpClass一般包含启动app的步骤和其他初期数据和环境准备的步骤。tearDown和tearDownClass一般包含关闭App的步骤和其他数据清理和环境清理的步骤。

pyhont+unittest的测试固件的更多相关文章

  1. Unittest方法 -- 测试固件(TestFixture)

    前置和后置 1.setUp:在写测试用例的时候,每次操作其实都是基于打开浏览器输入对应网址这些操作,这个就是执行用例的前置条件.2.tearDown:执行完用例后,为了不影响下一次用例的执行,一般有个 ...

  2. python+unittest框架第三天unittest之分离测试固件和公共代码,跳过案例的执行

    我们在时间工作中,会将整个项目的代码分别放置多个模块中去编写.方便后期项目维护,比如,我们的web项目可能有多个IP地址,每个IP地址代表不同的测试环境.测试环境与Bat环境或者验收环境等.这就需要我 ...

  3. python+unittest框架第一天unittest之简单认识Test Fixure:测试固件【8月17更新】

    20万的慢慢会实现的吧,hhh unittest框架,我就不在介绍了,百度有很详细的介绍. 我们只要了解: 1.unittest是单元测试框架 2.它提供用例组织与执行:在实际工作中案例可能有上百条, ...

  4. Unittest 框架之测试固件-----(setUp与tearDown)你真的会用吗?

    前言 做自动化测试中,需要管理大量的测试用例,如果不用框架管理用例,那会是一件很麻烦的事. 如果所示只写了一个用例,内容就是输入网易邮箱账号和密码 test fixture:测试固件 简单来说就是做一 ...

  5. Python+Selenium框架 ---一个类文件多个测试方法情况下测试固件的写法

    我们测试中,肯定需要,打开一个页面,然后测试这个页面的多个用例,才关闭这个页面,去测试其他页面,在unittest是有相关测试固件方法去支持这种行为.请看下面 # coding=utf-8 impor ...

  6. python unittest自动测试框架

    编写函数或者类时进行测试,确保代码正常工作 python  unittest 模块提供了代码测试工具.按照定义测试包括两部分:管理测试依赖库的代码(称为‘固件’)和测试本身. 单元测试用于核实函数的某 ...

  7. Unittest方法 -- 测试套件

    TestSuite 测试固件 一. import unittestclass F6(unittest.TestCase): def setUp(self): pass def tearDown(sel ...

  8. unittest中的测试固件

    运行下面的两段代码,看看有什么不同? 第一段: import unittest from selenium import webdriver class F2(unittest.TestCase): ...

  9. unittest 执行测试脚本输出测试报告

    import unittestimport HTMLTestRunnertest as HTMLTestRunner#获取路径path = './'#创建测试套件,读取测试脚本suite = unit ...

随机推荐

  1. 牛客编程巅峰赛S1第6场 - 黄金&钻石&王者 C.星球游戏 (单源最短路,Dijkstra)

    题意:有\(n\)个点,\(m\)条双向边,两个方向的权值都是相等的,可以从\(A\)中的某个点出发走到\(B\)中的某个点,求所有路径中的最短距离,如果A和B中没有点联通,则输出\(-1\). 题解 ...

  2. 牛客编程巅峰赛S1第6场 - 黄金&钻石&王者 A.牛牛爱奇数 (模拟)

    题意:有一组数,每次将所有相等的偶数/2,求最少操作多少次使得所有数变成奇数. 题解:用桶标记,将所有不同的偶数取出来,然后写个while模拟统计一下次数就行. 代码: class Solution ...

  3. WSL2 Ubuntu apt-get update失败

    情况: 这个问题在github上也有讨论:https://github.com/microsoft/WSL/issues/4342 不过经过我的尝试,是DNS问题,这是默认的配置: 这个配置来自win ...

  4. 002、Python中json字符串与字典转换

    1.测试用例文件TestCase.xlsx 2.编写Python文件进行读取 #!/usr/bin/env python # -*- coding:utf-8 -*- import time impo ...

  5. DNS 是什么?如何运作的?

    前言 我们在上一篇说到,IP 地址的发明把我们纷乱复杂的网络设备整齐划一地统一在了同一个网络中. 但是类似于 192.168.1.0 这样的地址并不便于人类记忆,于是发明了 域名(Domain Nam ...

  6. 浅谈Webpack模块打包工具四

    Webpack 生产环境优化 生产环境和开发环境有很大的差异,生产环境只注重运行效率,开发环境主要开发效率,webpack4.0开始提出了(mode)模式的概念 针对不同的环境进行不同的配置,为不同的 ...

  7. LINUX - mmap()

    内存映射函数 https://blog.csdn.net/qq_33611327/article/details/81738195

  8. MSE,RMSE

    MSE: Mean Squared Error 均方误差是指参数估计值与参数真值之差平方的期望值; MSE可以评价数据的变化程度,MSE的值越小,说明预测模型描述实验数据具有更好的精确度. RMSE  ...

  9. PAT L2-016. 愿天下有情人都是失散多年的兄妹 (BFS)

    L2-016. 愿天下有情人都是失散多年的兄妹 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 呵呵.大家都知道五服以内不得通婚 ...

  10. JS编程练习:封装insertAfter函数(功能类似于系统insertBefor)

    那么insertAfter()要实现的功能: 在指定的子节点后面插入新的子节点: 1 <body> 2 <div> 3 <p></p> 4 <sp ...