Selenium+UnitTest+HTMLTestRunner生成测试报告

        上一个博客介绍了一个医药管理系统的搭建,这篇主要是用一个医药管理系统登录的案例,做web自动化,使用HTMLTestRunner生成一个测试报告。

1、web自动化测试代码编写

        对登录页面做web自动化测试,分别测试登录成功和不填写用户名密码登录失败的情况,对测试结果做断言。登录成功的测试步骤:(1)输入用户名、输入密码、点击登录 (2)进入登录后的页面选取元素做断言

        ​ 这里右键点击页面--点击检查,可以查看页面源代码,点击最左边方框+小箭头,在点击User Id输入框,源代码就会对选中部分高亮,这里可以通过ID定位用户名密码,通过Xpath定位登录按钮

​ 这里是用户登录后成功进入管理系统的页面,这里可以通过是否能够定位到admin,判断用户是否登录成功,这里就是定位admin,获取元素的文本信息。

        ​ 第二个是不填写用户名密码,直接点登录的情况,这里就出现了一个弹出框,我们回顾一下之前学到的弹出框知识,自动化出现的弹出框两种,一直是自定义的弹出框,可以直接通过浏览器开发者工具查看到元素信息,另一种js的弹出框,需要转换到allert框内,e1 = driver.switch_to.alert ,选择确定e1.accept()或者取消e1.dismiss()

        ​ 这里是可以直接通过浏览器开发者工具查看到,这里主要通过使用contains对里面文本进行定位。

        ​ 因为每次测试都需要获取驱动和关闭浏览器,所以用了一个方法级别的夹具setUp(),tearDown(),在第一次测试时没有使用等待,导致测试时报错找不到元素,因此设置了一个隐式等待。

from selenium import webdriver
import unittest
​
from selenium.webdriver.common.by import By
​
​
class MMS_Auto(unittest.TestCase):
​
    def setUp(self) -> None:
        self.driver = webdriver.Chrome() #获取浏览器驱动
        self.driver.implicitly_wait(5) #设置隐式等待5s
        self.url = "http://192.168.47.130:8080/mms/login.html"
​
    def tearDown(self) -> None:
        self.driver.close() #关闭窗口
    #登录成功断言
    def test_login_success(self):
        self.driver.get(self.url)
        self.driver.find_element(By.ID,"username").send_keys("admin") #输入用户名
        self.driver.find_element(By.ID,"password").send_keys("1234")  #输入密码
        self.driver.find_element(By.CSS_SELECTOR,"[type='submit']").click() #点击登录
        login_name = self.driver.find_element(By.ID,"loginName").text  #对登录后页面获取文本
        self.assertEqual("admin",login_name)  #将用户名和登录后系统界面用户名断言
    #登录失败断言
    def test_login_fail(self):
        self.driver.get(self.url)
        self.driver.find_element(By.CSS_SELECTOR,"[type='submit']").click()
        msg = self.driver.find_element(By.XPATH,"//div[contains(text(),'不能为空')]").text
        self.assertEqual("User Id不能为空",msg)
​

2、测试报告截图、失败重跑,测试报告

        ​ 我之前在我写的博客unittest框架从编写测试用例到生成测试报告里面介了 HTMLTestReport 做测试报告,这里介绍一个功能更强大的HTMLTestRunner生成测试报告,它可以在报告中添加截图图片,还可以进行失败重试。

1、HTMLTestRunner配置方法

 ​ 大家可以从GitHub地址GitHub - GoverSky/HTMLTestRunner_cn: HTMLTestRunner 汉化版,同时支持python 2和3,增加截图展示功能,失败重试        上面下载HTMLTestRunner_cn.py文件,放到python的site-packages目录下

 

 2、报告中添加截图

报告使用的截图全部保存为base64编码,避免了报告图片附件的问题,selenium 使用的是get_screenshot_as_base64 方法获取页面截图的base64编码 因为要提取用例中的driver变量获取webdriver对象,所以要实现截图功能必须定义在用例中定义webdriver 为drive

    def setUp(self):
        self.imgs=[]  # (可选)初始化截图列表
        self.driver = webdriver.Chrome()

成功或失败后截图

  self.imgs.append(self.driver.get_screenshot_as_base64()) #登录后截图

生成测试报告:

​title:就是一个大的文字说明

description:是报告中的小的文字说明

​stream:是以二进制方式写测试报告

verbosity:是报告的详细程度

retry:断言失败后的重试次数           

save_last_try:值为Ture指的是只保留失败重试后的最后一次结果,False保留全部
代码如下:
HTMLTestRunner(title="带截图的测试报告", description="小试牛刀", stream=open("sample_test_report.html", "wb"), verbosity=2, retry=2, save_last_try=True)

UnitTest+HTMLTestRunner生成测试报告代码如下:

from selenium import webdriver
import unittest
from HTMLTestRunner_cn import HTMLTestRunner
​
from selenium.webdriver.common.by import By
​
​
class MMS_Auto(unittest.TestCase):
​
    def setUp(self) -> None:
        self.driver = webdriver.Chrome() #获取浏览器驱动
        self.driver.implicitly_wait(5) #设置隐式等待5s
        self.url = "http://192.168.47.130:8080/mms/login.html"
        self.imgs = [] #初始化截图列表
​
    def tearDown(self) -> None:
        self.driver.close() #关闭窗口
    #登录成功断言
    def test_login_success(self):
        self.driver.get(self.url)
        self.driver.find_element(By.ID,"username").send_keys("admin") #输入用户名
        self.driver.find_element(By.ID,"password").send_keys("1234")  #输入密码
        self.driver.find_element(By.CSS_SELECTOR,"[type='submit']").click() #点击登录
        login_name = self.driver.find_element(By.ID,"loginName").text  #对登录后页面获取文本
        self.imgs.append(self.driver.get_screenshot_as_base64()) #登录后截图
        self.assertEqual("admin",login_name)  #将用户名和登录后系统界面用户名断言
    #登录失败断言
    def test_login_fail(self):
        self.driver.get(self.url)
        self.driver.find_element(By.CSS_SELECTOR,"[type='submit']").click()
        msg = self.driver.find_element(By.XPATH,"//div[contains(text(),'不能为空')]").text
        self.imgs.append(self.driver.get_screenshot_as_base64())  # 失败后截图
        self.assertEqual("User Id不能为",msg)
​
​
if __name__ == "__main__":
    test1 = unittest.defaultTestLoader.loadTestsFromTestCase(MMS_Auto)
    suit = unittest.TestSuite(test1)
    runner = HTMLTestRunner(
        title="MMS医药管理系统",
        description="登录测试",
        stream=open("report.html", "wb"), #报告存储
        verbosity=2,#详细程度
        retry=2,
        save_last_try=False
    )
    runner.run(suit)

执行后的测试报告:

​ 点击失败可以查看报错,点击显示截图,可以查看截图内容

注意注意!!!

​         如果你在执行的时候,是用unittest框架的执行方式将无法生成测试报告,只能输出测试结果

 ​ 需要做如下配置在,才能生成测试报告,右键右上角程序名--》点击Edit Configuration

 然后点击“+”号,在点击Python,就会出现右边的框,需要你填脚本位置和脚本所在目录,应用在点击OK

 此时在右键点击就不会有unittest的运行方式了,运行就可以生成测试报告

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值