当前位置:网站首页>UnitTest框架应用
UnitTest框架应用
2022-07-25 17:58:00 【司小幽】
1.UnitTest的应用规则
''' Unittest的应用规则: 1.是Python默认自带的库。不需要安装了,直接导入就可以。 2.调用时一定要通过继承UnitTest.TestCase类来实现 3.UnitTest四大组件 前后置条件:setup和teardown,分为class级和function级 不会把测试数据的初始化放到前置函数之中 一个class中只能存在class级和Function级各一套 如果考虑多用例间浏览器缓存通用的场景,使用setupclass,否则使用setup进行前置设置 测试用例:所有的测试用例都是基于test开头的函数,用例运行顺序是固定的,基于ASCII来进行排序,再执行。 0-9,A-Z.a-z的顺序,建议在编写用例的时候,进行编号排序 不加test开头的函数,都是普通的函数,需要被调用才可以生效。 unittest下支持单用例执行,但是虚竹不推荐使用,因为容易因为用例关联逻辑报错 断言:在unitTest下,只要代码没有报错,就认为是通过的。 通过self.assert*字样来进行调用 4.UnitTest要启动运行,一定是在main函数中用unittest.main()启动 5.UnitTest控制台的打印有点莫名其妙,不要太过于在意控制台的输出顺序 6.测试用例在设计的时候一定要考虑到用例间的关联性要尽可能低,让每一个用例尽可能是独立化存在的。 '''
import unittest
class UnitDemo02(unittest.TestCase):
# 前置条件:可以理解为是class在执行之初,先执行的初始化行为(类级别),只执行一次
@classmethod
def setUpClass(cls) -> None:
print('这是setUpclass02')
cls.a = '虚竹'
# 后置条件:可以理解为是每一个class在执行结束时,最后执行的收尾(类级别) 只执行一次
@classmethod
def tearDownClass(cls) -> None:
print('这是teardownclass02')
# 前置条件:可以理解为是每一个测试用例在执行前的初始化行为。(用例级别)
def setUp(self) -> None:
print('这是前置条件')
# a = '虚竹'
# 后置条件:可以理解为是每一个用例在执行结束之后的收尾(用例级别)
def tearDown(self) -> None:
print('这是后置条件')
# 测试用例1
def test_01_a(self):
print('这是a')
# print(self.a)
# 修改cls.a的值:类名
# 类名.属性修改,可以修改元素的值,对全局生效
# UnitDemo.a = '钟灵'
# self.属性修改,可以在函数内修改,对全局无效
# self.a = '钟灵'
# print(self.a)
# 测试用例2
def test_02_A(self):
# print('这是A')
# print(self.a)
pass
# 测试用例3
def test_03_1(self):
print('这是1')
# 这个是第二个class对象
class UnitDemo(unittest.TestCase):
# 前置条件:可以理解为是class在执行之初,先执行的初始化行为(类级别),只执行一次
@classmethod
def setUpClass(cls) -> None:
print('这是setUpclass')
cls.a = '虚竹02'
# 后置条件:可以理解为是每一个class在执行结束时,最后执行的收尾(类级别) 只执行一次
@classmethod
def tearDownClass(cls) -> None:
print('这是teardownclass')
def test_01(self):
# print('这是unitDemo的测试用例')
# print(self.a)
a = 3.1415926123456789
b = 3.141592612345678
self.assertAlmostEqual(a,b,msg = '不对')
# self.assertEqual(a,b,msg='不对')
def test_02(self):
# c = self.func(1,2)
# print(c)
c = 10
print('这是02')
UnitDemo.a = c
return c
def test_03(self):
# print(self.test_02())
print(self.a)
# 如果不用test开头,则为普通函数
def func(self,a,b):
print('这是func函数')
return a + b
# unittest启动
if __name__ == '__main__':
unittest.main()
2.UnitTest下的自动化测试实现
''' Unittest下的自动化测试实现 一个完整的流程,不同的小流程分为不同的用例去管理。这样便于维护 '''
import unittest
from class24.web_keys import Keys
class UnitAuto(unittest.TestCase):
# 前后置
@classmethod
def setUpClass(cls) -> None:
cls.key = Keys('Chrome')
# def setUp(self) -> None:
# self.key = Keys('Chrome')
#
# def tearDown(self) -> None:
# self.key.quit()
@classmethod
def tearDownClass(cls) -> None:
cls.key.quit()
def test_01_login(self):
# key = Keys('Chrome')
self.key.open('http://39.98.138.157/shopxo/index.php?s=/index/user/logininfo.html')
self.key.input('name','accounts','sixiaoyou')
self.key.input('name','pwd','xxx')
self.key.click('xpath','//button[text()="登录"]')
# self.assertEqual() 类似于 assert a == b,msg
# self.assertTrue(self.key.assert_text('link text','退出','退出1'),msg = '断言失败')
self.assertEqual('退出1',self.key.get_text('link text','退出'),msg = '断言失败')
self.key.sleep(5)
# key.quit()
# def test_02_search(self):
# key = Keys('Chrome')
# self.key.open('http://39.98.138.157/shopxo/index.php')
# self.key.input('id','search-input','手机')
# self.key.click('id','ai-topsearch')
# self.key.sleep(5)
# key.quit()
if __name__ == '__main__':
unittest.main()
边栏推荐
- 大话DevOps监控,团队如何选择监控工具?
- I'm also drunk. Eureka delayed registration and this pit!
- PageHelper can also be combined with lambda expressions to achieve concise paging encapsulation
- Trooper
- Sorting also needs to know the information and linked list
- 越来越成熟的Rust,都应用了哪些场景呢?
- Auditing related notes
- SLA 、SLO & SLI
- [Hardware Engineer] can't select components?
- How to fix the first row title when scrolling down in Excel table / WPS table?
猜你喜欢
![[MySQL]数据库中的索引为什么是用B+树来实现? 哈希表/红黑树/B树是否可行呢?](/img/1f/a2d50ec6bc97d52c1e7566a42e564b.png)
[MySQL]数据库中的索引为什么是用B+树来实现? 哈希表/红黑树/B树是否可行呢?

IDEA集成SVN代码管理常用功能

关于云XR介绍,以及5G时代云化XR的发展机遇

PageHelper还能结合Lambda表达式实现简洁的分页封装

Nineteen year old summary

Installation and operation instructions of SVN client (TortoiseSVN)

What is an IP SSL certificate and how to apply for it?

Update 3dcat real time cloud rendering V2.1.2 release

HCIP第一天实验

What is the relationship between cloud fluidization and cloud desktop
随机推荐
Problems faced by cloud XR and main application scenarios of cloud XR
How to fix the first row title when scrolling down in Excel table / WPS table?
Food safety | eight questions and eight answers take you to know crayfish again! This is the right way to eat!
为什么数字化未来取决于3D实时渲染
Redis source code and design analysis -- 16. AOF persistence mechanism
2022/7/23
Principle and implementation of UDP penetration NAT in P2P
How many points did NPDP pass? How to pass with high scores?
RestTemplate通过泛型实现POST、PUT、DELETE、GET、集合请求以及文件上传(可批量文件、可带参数)的统一封装(可打印日志)
Highlights
Mock服务moco系列(二)- Json格式、File文件、Header、Cookie、解决中文乱码
Product life cycle to be considered in making intelligent hardware
What is an IP SSL certificate and how to apply for it?
Drawing PDF form (II) drawing excel form style in PDF through iText, setting Chinese font, watermark, logo, header and page number
Function name pointer and function pointer
Go channel simple notes
Creation of unity Bezier curve
绘制pdf表格 (一) 通过itext实现在pdf中绘制excel表格样式并且实现下载(支持中文字体)
UFT(QTP)-总结点与自动化测试框架
Idea 必备插件