当前位置: 首页 > news >正文

web 自动化之 Unittest 应用:报告装饰器断言

文章目录

      • 一、常见的第三方库结合 unittest 生产 html 格式测试报告
        • 1、HtmlTestRunner
        • 2、BeatifulReport
      • 二、装饰器 @ unittest.skip 强制跳过&条件跳过
      • 三、unittest的常用断言方法

一、常见的第三方库结合 unittest 生产 html 格式测试报告

1、HtmlTestRunner

官网下载 HtmlTestRunner.py 只能支持 python2 版本,支持 Python3 ,需要做修改
路径:python安装路径/Lib

import unittest
from TestReport.testcase_01 import TestCase01
import HTMLTestRunner# 加载用例
testcases = unittest.TestLoader().loadTestsFromTestCase(TestCase01)
# HTMLTestRunner 生成的测试报告
with open('F:/Pycharm/TestShop/TestReport/html_report.html', 'wb+') as hf:HTMLTestRunner.HTMLTestRunner(stream=hf,title="Html 测试报告",description="测试用例执行详情").run(testcases)

HTMLTestRunner 文件内容

2、BeatifulReport

安装三方库:BeatifulReport

import unittest
from TestReport.testcase_01 import TestCase01
from BeautifulReport import BeautifulReport# 加载用例
testcases = unittest.TestLoader().loadTestsFromTestCase(TestCase01)
# BeautifulReport 生成的测试报告
BeautifulReport(testcases).report(description="Html 测试报告",filename="report_bf",report_dir="reports")

企业测试报告的优化及定制 优化测试报告模板 通过 js+html/html5
pytest+allure 生成更加美观的测试报告+优化定制(装饰器)

二、装饰器 @ unittest.skip 强制跳过&条件跳过

import unittest
"""
@unittest.skip 强制跳过执行
@unittest.skipIf 符合条件,则跳过执行
@unittest.skipUnless 条件不成立,则跳过执行
"""
# @unittest.skipUnless(False,"装饰器也可以作用于类,整个模块下的用例强制跳过执行")
class TestCase01(unittest.TestCase):@unittest.skip("此用例暂时不启用")def test_login(self):print('test_01')@unittest.skipIf(True,"符合条件,则跳过执行")def test_select_goods(self):print('test_02')@unittest.skipUnless(2>3, "不符合条件,则跳过执行")def test_put_to_cart(self):print('test_03')def test_pay_goods(self):print('test_04')
if __name__ == '__main__':unittest.main()

三、unittest的常用断言方法

import unittest
from selenium import webdriver
import time
from selenium.webdriver.common.by import By'''
二、常用断言方法
1、assertIn(字符1,字符2) 字符1是否包含在字符2
2、self.assertNotIn(字符1,字符2)  字符1不包含包含在字符2
self.assertEqual(参数1,参数2,"断言失败的描述")  参数1等于参数2
self.assertNotEqual(参数1,参数2,"断言失败的描述")参数不等于参数2
self.assertTrue(True)
self.assertFalse(False)
'''
class TestCase02(unittest.TestCase):def setUp(self) -> None:# 打开浏览器self.driver = webdriver.Edge()# 加载地址self.driver.get("http://116.62.63.211/shop/")def test_login(self):"""登录用例"""username = "hc_test"password = "hctest123"el_login_link = self.driver.find_element(By.LINK_TEXT, "登录")# 点击登录el_login_link.click()time.sleep(1)el_login = self.driver.find_element(By.XPATH, '//button[text()="登录"]')el_username = self.driver.find_element(By.NAME, "accounts")el_password = self.driver.find_element(By.XPATH, '//input[@type="password"]')# 输入用户名el_username.send_keys(username)# 输入密码el_password.send_keys(password)# 点击登录time.sleep(1)el_login.click()time.sleep(2)# 断言  获取账号的名称=usernameel_username = self.driver.find_element(By.XPATH, "//div[@class='menu-hd']/em[2]")self.assertIn(username, el_username.text)def test_select_goods(self):"""检索商品"""self.driver.get("http://116.62.63.211/shop/")select_goods = "手机"# 定位搜索输入el_select = self.driver.find_element(By.ID, "search-input")el_select.send_keys(select_goods)el_button = self.driver.find_element(By.ID, "ai-topsearch")el_button.click()time.sleep(2)# 断言:验证测试结果与预期结果是否一致# 获取商品列表的标题el_goods = self.driver.find_elements(By.XPATH, "//div[@class='items am-padding-bottom-xs']")# 判断content是否包含手机字符?# 标题是否包含手机for el in el_goods:self.assertIn(select_goods, el.text, "商品标题中未包含检索内容")def tearDown(self) -> None:self.driver.close()if __name__ == '__main__':unittest.main()
http://www.xdnf.cn/news/399691.html

相关文章:

  • spring中的@PropertySource注解详解
  • 【SSM-SSM整合】将Spring、SpringMVC、Mybatis三者进行整合;本文阐述了几个核心原理知识点,附带对应的源码以及描述解析
  • 《步进电机最小转速终极指南:从理论到实战,突破低速极限的5大秘技》
  • 未来技术展望:光子量子计算集成与连续变量可视化
  • 第二章、物理层
  • 基于CNN-BiLSTM-Attention的回归预测模型!
  • 基于注意力机制与iRMB模块的YOLOv11改进模型—高效轻量目标检测新范式
  • properties和yaml 文件加载指定配置文件的注解
  • MySQL 8.0 OCP 英文题库解析(三)
  • Java:编程世界的常青树与数字化转型的基石
  • VM中 ubuntu 网卡不显示
  • 机器学习第六讲:向量/矩阵 → 数据表格的数学表达,如Excel表格转数字阵列
  • HDFS客户端操作
  • 堆复习(C语言版)
  • 首屏优化,webpack插件用于给html中js自动添加异步加载属性
  • Linux操作系统从入门到实战(六)Linux开发工具(上)详细介绍什么是软件包管理器,Linux下如何进行软件和软件包的安装、升级与卸载
  • 探索边缘计算:赋能物联网的未来
  • 一.Gitee基本操作
  • 2025年阿里云ACP人工智能高级工程师认证模拟试题(附答案解析)
  • Vue:插值表达
  • 如何在 Bash 中使用 =~ 操作符 ?
  • 单词短语0512
  • C++色彩博弈的史诗:红黑树
  • 关于大语言模型的困惑度(PPL)指标优势与劣势
  • 菊厂0510面试手撕题目解答
  • spdlog日志格式化 标志全指南
  • Java详解LeetCode 热题 100(14):LeetCode 56. 合并区间(Merge Intervals)详解
  • 【网络安全】SQL注入
  • pdf 不是扫描件,但却无法搜索关键词【问题尝试解决未果记录】
  • 用短说社区搭建的沉浸式生活方式分享平台