pyhont+unittest的测试固件
在执行一条自动化测试用例时需要做一些测试前的准备工作和测试后的清理工作,如:创建数据库链接、启动服务进程、打开文件、打开浏览器、测试环境的清理、关闭数据链接、关闭文件等。如果每执行一条用例都需要编写上面的代码就会造成代码的冗余,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的测试固件的更多相关文章
- Unittest方法 -- 测试固件(TestFixture)
前置和后置 1.setUp:在写测试用例的时候,每次操作其实都是基于打开浏览器输入对应网址这些操作,这个就是执行用例的前置条件.2.tearDown:执行完用例后,为了不影响下一次用例的执行,一般有个 ...
- python+unittest框架第三天unittest之分离测试固件和公共代码,跳过案例的执行
我们在时间工作中,会将整个项目的代码分别放置多个模块中去编写.方便后期项目维护,比如,我们的web项目可能有多个IP地址,每个IP地址代表不同的测试环境.测试环境与Bat环境或者验收环境等.这就需要我 ...
- python+unittest框架第一天unittest之简单认识Test Fixure:测试固件【8月17更新】
20万的慢慢会实现的吧,hhh unittest框架,我就不在介绍了,百度有很详细的介绍. 我们只要了解: 1.unittest是单元测试框架 2.它提供用例组织与执行:在实际工作中案例可能有上百条, ...
- Unittest 框架之测试固件-----(setUp与tearDown)你真的会用吗?
前言 做自动化测试中,需要管理大量的测试用例,如果不用框架管理用例,那会是一件很麻烦的事. 如果所示只写了一个用例,内容就是输入网易邮箱账号和密码 test fixture:测试固件 简单来说就是做一 ...
- Python+Selenium框架 ---一个类文件多个测试方法情况下测试固件的写法
我们测试中,肯定需要,打开一个页面,然后测试这个页面的多个用例,才关闭这个页面,去测试其他页面,在unittest是有相关测试固件方法去支持这种行为.请看下面 # coding=utf-8 impor ...
- python unittest自动测试框架
编写函数或者类时进行测试,确保代码正常工作 python unittest 模块提供了代码测试工具.按照定义测试包括两部分:管理测试依赖库的代码(称为‘固件’)和测试本身. 单元测试用于核实函数的某 ...
- Unittest方法 -- 测试套件
TestSuite 测试固件 一. import unittestclass F6(unittest.TestCase): def setUp(self): pass def tearDown(sel ...
- unittest中的测试固件
运行下面的两段代码,看看有什么不同? 第一段: import unittest from selenium import webdriver class F2(unittest.TestCase): ...
- unittest 执行测试脚本输出测试报告
import unittestimport HTMLTestRunnertest as HTMLTestRunner#获取路径path = './'#创建测试套件,读取测试脚本suite = unit ...
随机推荐
- Who Gets the Most Candies?
Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 11303 Accepted: 3520 Case Time Limit ...
- HihoCoder - 1110
题意: 您的任务是判断输入是否是合法的正则表达式.正则表达式定义如下: 1: 0和1都是正则表达式. 2:如果P和Q是正则表达式,那么PQ就是正则表达式. 3:如果P是正则表达式,(P)就是正则表达式 ...
- [CodeForces-629A 用阶乘会爆掉
题意: 给你一个n*n的蛋糕,如果某个位置是'C'那就代表这是一个巧克力块,否则就不是.如果某两个巧克力块在同一行或同一列,那么这个家庭的幸福值就会加1,问你这个家庭的幸福值最大是多少 Input 3 ...
- C# List.Sort与IComparer接口及Comparison委托应用于集合排序
C#里List.Sort的用法 using System; using System.Collections.Generic; using System.Linq; using System.Text ...
- Vulkan与DX11交互
Demo演示地址07_wintest 有什么用 在android平台主流是用opengl es,android下vulkan与opengles纹理互通. 而在win平台,主流游戏还用的是DX11,如果 ...
- JVM ZeroTLAB 是什么意思呢?
ZeroTLAB 是 JVM 的一个布尔型 Flag,意思是是否将新创建的 TLAB 内的所有字节归零. 默认:false 举例:-XX:+ZeroTLAB 当分配出来 TLAB 之后,根据 Zero ...
- HTTP1.0和HTTP1.1以及HTTP2.0的区别
(1)连接方面 HTTP1.0使用非持久连接,即在非持久连接下,一个tcp连接只传输一个Web对象.每次请求和响应都需要建立一个单独的连接,每次连接只是传输一个对象,严重影响客户机和服务器的性能. H ...
- 数仓增量更新hive实现
注:参考文末文章,加上自己的理解. 1.增量更新 有一个 base_table 表存放的是 12 月 15 日之前的所有数据,当 12 月 16 日的数据产生后,生成了一个 incremental_t ...
- java变量、数据类型、运算符
关键字.保留字.标识符 关键字 Java关键字是对Java编译器有特殊含义的字符串,是编译器和程序员的一个约定,程序员利用关键字来告诉编译器其声明的变量类型.类.方法特性等信息 保留字 goto.co ...
- vue & npm & components & plugins
vue & npm & components & plugins how to publish an vue ui component to npm? https://www. ...