unittest单元测试框架使用技巧_unittest 怎样加base_url

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注软件测试)
img

正文

2 suite = unittest.TestSuite()
3 suite.addTest(SearchTest(“test_search”))
4 #执行测试
5 runner = unittest.TextTestRunner()
6 runner.run(suite)

执行之后发现和之前用unittest.main()的结果一样。

用例组织

这里我们假设,脚本当中有多个TestCase如test_case1,test_case2…,那我们应该怎样去控制它们的执行顺序呢?

执行测试用例方案一

直接用

unittest.main()

执行,这里它搜索所有以test开头的测试用例方法,按照ASCII的顺序执行多个用例。

执行测试用例方案二

先实例化测试套件,将用例加载进去,再用TextTestRunner去执行用例:

1 suite=unittest.TestSuite()
2 suite.addTest(Test(‘test_case2’))
3 suite.addTest(Test(‘test_case1’))
4 runner=unittest.TextTestRunner()
5 runner.run(suite)

执行的顺序是用例的加载顺序,比如这里是先执行2后执行1。

执行测试用例方案三

在方案2中,如果我们有成百上千个用例的话,一个一个add进去,是不太现实的,那么我们可以用defaultTestLoader来加载:

1 test_dir = ‘./’
2 discover = unittest.defaultTestLoader.discover(test_dir, pattern=‘*test.py’)
3 runner = unittest.TextTestRunner()
4 runner.run(discover)

这里用./指定了当前目录,指定了*test.py文件,对其当中的用例进行执行,顺序和方案一相同。

如果这里指定的目录下面有多个经pattern匹配上的.py文件呢?调用discover方法,首先通过test_dir定义查找目录,如果文件名满足定义的pattern,那么我们要用for循环来找出所有被筛选出来的用例,并将其循环加到套件中,主要代码如下:

1 for test_suite in discover:
2 for test_case in test_suite:
3 test_unit.addTests(test_case)

由上面组织用例的方式我们可以知道,在实际的测试用脚本开发中,我们可以在目录下创建xx.py的文件,当用例稳定运行后,可以修改成test_xx.py,以便于添加到测试套件中。注意,文件名的匹配规则,我们可以随便由pattern参数定义。

如果要执行多级目录结构的用例呢?要想被discover读取执行,我们要在目录下加_ init _.py文件

一个例子

下面简单的介绍一个用unittest组织的用例结构,先建立D:\Test_Project目录,下面放上test_case和test_report来分别存放用例和报告。

编写测试用例

在test_case下面编写用例,如下简单的示范了在百度上搜索关键字和点击设置的操作:

1 文件名为:test_baidu.py
2
3 # -- coding: utf-8 --
4 from selenium import webdriver
5 import unittest, time, re
6
7 class MyTest(unittest.TestCase):
8
9 def setUp(self):
10 self.driver = webdriver.Firefox()
11 self.driver.implicitly_wait(30)
12 self.base_url = “https://www.baidu.com”
13 self.accept_next_alert = True
14
15 def test_02baidu_search(self):
16 u’‘’ 测试百度搜索’‘’
17 driver = self.driver
18 driver.get(self.base_url + “/”)
19 driver.find_element_by_id(“kw”).click()
20 driver.find_element_by_id(“kw”).clear()
21 driver.find_element_by_id(“kw”).send_keys(“selenium-test”)
22 driver.find_element_by_id(“su”).click()
23 print(“test_baidu__test_02baidu_search”)
24
25 def test_01baidu_setting(self):
26 u’‘’ 测试百度首页设置 ‘’’
27 driver = self.driver
28 driver.get(self.base_url + “/”)
29 driver.find_element_by_css_selector(“div#u1 a.pf”).click()
30 driver.find_element_by_class_name(“setpref”).click()
31 driver.find_element_by_css_selector(“div#gxszButton>a.prefpanelgo”).click()
32 driver.switch_to_alert().accept()
33 print(“test_baidu__test_01baidu_setting”)
34
35 def tearDown(self):
36 self.driver.close()
37
38 #从all_test中调用时,可以不要这个
39 if name == “main”:
40 unittest.main()

为了显示出组织测试用例的效果,我们将此文件再复制一份,把文件名和方法名等修改一下:

1 文件名为:test_baidu2.py
2
3 # -- coding: utf-8 --
4 from selenium import webdriver
5 import unittest, time, re
6
7 class MyTest(unittest.TestCase):
8 u’‘’ 测试baidu的第二个用例’‘’
9 def setUp(self):
10 self.driver = webdriver.Firefox()
11 self.driver.implicitly_wait(30)
12 self.base_url = “https://www.baidu.com”
13 self.accept_next_alert = True
14
15 def test_02baidu_search(self):
16 u’‘’ 测试baidu的第二个用例的test_02baidu_search’‘’
17 driver = self.driver
18 driver.get(self.base_url + “/”)
19 driver.find_element_by_id(“kw”).click()
20 driver.find_element_by_id(“kw”).clear()
21 driver.find_element_by_id(“kw”).send_keys(“selenium-test”)
22 driver.find_element_by_id(“su”).click()
23 print(“test_baidu2__test_02baidu_search”)
24
25
26 def test_01baidu_setting(self):
27 u’‘’ 测试baidu的第二个用例的test_01baidu_setting’‘’
28 driver = self.driver
29 driver.get(self.base_url + “/”)
30 driver.find_element_by_css_selector(“div#u1 a.pf”).click()
31 driver.find_element_by_class_name(“setpref”).click() driver.find_element_by_css_selector(“div#gxszButton>a.prefpanelgo”).click()
32 driver.switch_to_alert().accept()
33 print(“test_baidu2__test_01baidu_setting”)
34
35 def tearDown(self):
36 self.driver.close()
37
38 if name == “main”:
39 unittest.main()

美化报告样式和发送结果邮件

上面我们写了 两个测试用例作为示例,我们也可以添加更多的进去。接着我们使用HTMLTestRunner这个开源模块来美化测试报告,关于它的下载使用可以参考HTMLTestRunner · PyPI。然后,我们可以在代码中写上运行完成之后自动发送测试邮件出来,便于我们查看。请参看以下代码:

1 #coding=utf-8
2 import unittest
3 import smtplib
4 from email.mime.text import MIMEText
5 from email.header import Header
6 import time
7 import HTMLTestRunner
8 from email.mime.application import MIMEApplication
9
10 #—发送邮件—
11 def send_email(report_file):
12 sender = “XXXXXX@qq.com”
13 receiver = “XXXXXX@qq.com”
14 smtpserver = “smtp.qq.com”
15 #发送邮箱的账号密码,此处使用的是qq邮箱和第三方登录的授权码
16 username = “XXXXXX@qq.com”
17 password = “gfomcomojtuudijc”
18
19 #定义邮件正文
20 file = open(report_file,“rb”)
21 mail_body = file.read()
22 file.close()
23
24 msg = MIMEText(mail_body, _subtype=“html”, _charset=“utf-8”)
25 msg[“Subject”] = u"自动化测试报告"
26
27 smtp = smtplib.SMTP_SSL(“smtp.qq.com”)
28 smtp.login(username, password)
29 smtp.sendmail(sender, receiver, msg.as_string())
30 smtp.quit()
31 print(“Email has send out !”)
32
33 #—将用例添加到测试套件—
34 def creatsuite():
35 testunit=unittest.TestSuite()
36 test_dir = “D:\Test_Project\test_case”
37 discover = unittest.defaultTestLoader.discover(test_dir, pattern=“test*.py”,
38 top_level_dir = None)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-jiiU4H4d-1713421501485)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值