【unittest】unittest自动化框架搭建实战-02
Python+unittest+requests+selenium+HwTestReport 完整的混合自动化测试框架初试牛刀
1、搭建UI自动化测试框架
项目文件结构:
--baiduTest
|--test_baidu.py
|--__init___.py
|--main.py
|--__init__.py
编写test_baidu.py代码:
from selenium import webdriver import unittest import time class Baidu (unittest .TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.implicitly_wait(30) self.base_url = "http://www.baidu.com/" def test_baidu_search(self): driver = self .driver driver.get(self.base_url + './') driver.find_element_by_id("kw").send_keys('itesting') driver.find_element_by_id("su").click() time.sleep(2) search_results=driver.find_element_by_xpath('//*[@id="1"]/h3/a').get_attribute('innerHTML') self.assertEqual('iTesting' in search_results,True) def tearDown(self) -> None: self.driver.quit() if __name__ == '__main__': unittest.main(verbosity=2)
备注:
webdriver对应驱动需要自己手动下载,放到python安装目录下
参考下载地址,找到自己浏览器对应版本下载:https://registry.npmmirror.com/binary.html?path=chromedriver/
2、拓展unittest的测试报告
新建common目录并添加html_report.py测试报告文件
html_report.py文件详细内容:
#用户定制测试报告的各项信息 import os import time import HwTestReport class GenerateReport(): def __init__(self): #获取时间并转换为易读格式 now=time.strftime('%Y-%m-%d-%H-%M',time.localtime(time.time())) #定义测试报告的名称格式 self.report_name='test_report'+now+'.html' #获取项目路径 self.test_base=os.path.dirname(os.path.dirname(__file__))+r'/report' print(self.test_base) #判断路径下是否已存在report文件,存在并删除文件 if os.path.exists(os.path.join(self.test_base,self.report_name)): os.remove(os.path.join(self.test_base,self.report_name)) fp =open(os.path.join(self.test_base,self.report_name),'wb') fp.close() def generate_report(self,test_suites): fp=open(os.path.join(self.test_base,self.report_name),'wb') runner=HwTestReport.HTMLTestReport(stream=fp,title='自动化测试报告',description='详细测试用例结果',verbosity=1) runner.run(test_suites) if __name__ == '__main__': GenerateReport()
备注: HwTestReport文件需要自己下载放到python安装目录即可
改动后的main.py文件展示:
import os import unittest from common.html_reporter import GenerateReport if __name__ == '__main__': #自动识别tests目录下test开始的py文件 suites = unittest.defaultTestLoader.discover(os.path.join(os.path.dirname(__file__), "tests"),pattern='*.py',top_level_dir=os.path.dirname(__file__)) htm_report=GenerateReport() htm_report.generate_report(suites)
3、拓展功能-unittest测试框架集成接口测试
request基础知识这里不再描述,不知道的可以参考这篇文章:https://blog.csdn.net/NV_li_JCF/article/details/108640749
这里我们只讲test_lagou.py文件内容:
import json import unittest import requests class TestLaGou(unittest.TestCase): def setUp(self) -> None: pass def test_visit_lagou(self): pass def test_get_new_message(self): # ↑此处需要定义一个方法获取登录的 # cookie, 因为我们无法知道拉勾网登录真实的API, 所以采用此方式登录 message_url ='https://api.vvhan.com/api/love?type=json' headers = {'x-l-req-header':'{deviceType: 9}'} #直接带登录态发送请求 result =requests.get(message_url,allow_redirects = False) print(result.text) assert result.json()['success']==True def tearDown(self): pass if __name__ == '__main__': unittest.main(verbosity=1)
备注:因为https://api.vvhan.com/api/是一个开源接口,不需要请求头,token那些 ,所以setUp和tearDown是空,可以结合自己的项目进行变动
4、运行main.py文件后测试报告结果展示:
总结下:
参考从0到1搭建自动化测试框架做为学习笔记总结下,实际投入项目工作中,还需要封装很多东西,比如基础定位脚本,接口类封装,日志截图类封装,数据库配置、邮箱-钉钉机器人等、接口等的配置项,在后续的学习中逐步完善总结
本文来自博客园,作者:橘子偏爱橙子,转载请注明原文链接:https://www.cnblogs.com/xfbk/p/15969916.html