Fork me on GitHub

【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搭建自动化测试框架做为学习笔记总结下,实际投入项目工作中,还需要封装很多东西,比如基础定位脚本,接口类封装,日志截图类封装,数据库配置、邮箱-钉钉机器人等、接口等的配置项,在后续的学习中逐步完善总结

  

 

posted @ 2022-03-05 23:26  橘子偏爱橙子  阅读(201)  评论(0编辑  收藏  举报