【如何学习Python自动化测试】—— HTMLTestRunner 生成测试报告

🌟欢迎来到 我的博客 —— 探索技术的无限可能!


🌟博客的简介(文章目录)

【如何学习Python自动化测试】系列文章目录

1.自动化测试环境搭建
  (补充)浏览器驱动的安装 以及 如何更新driver
2.页面元素定位
3.时间等待
4.浏览器操作
5.鼠标键盘操作
6.多层窗口定位
7.警告框处理
8.Cookie 处理
9.expected_conditions
10.Python 的 unittest 框架
11.HTMLTestRunner 生成测试报告


11 、HTMLTestRunner 生成测试报告

      在之前的案例中,我们完成了自动化测试的基本能力,也能完成测试的执行工作,但是还没有做到将测试的结果以报表的形式输出,接下来,在之前的测试基础上加上测试报告的输出。

11.1 HTMLTestRunner 介绍

      HTMLTestRunner是Python编程语言中的一个第三方库,它提供了一个易于使用,易于阅读和易于分享的HTML测试报告。该库适用于运行Python单元测试和集成测试,报告包括每个测试的状态,每个测试的运行时间,每个测试的失败原因等信息,并且可以将这些信息以HTML格式输出以方便查看和分享。这个库的优点是可以使测试报告易于理解,看起来更美观,帮助测试人员更准确和高效地检查测试结果。

11.2 生成测试报告

注意

  • 先安装HTMLTestRunner库: pip install HTMLTestRunner

  • HTMLTestRunner的路径必须是Python的搜索路径中,一般情况下,Python会自动搜索当前目录和Python的标准库。

  • HTMLTestRunner仅支持Python2.x,如果使用Python3.x需要安装HTMLTestRunner_PY3库。

      我们在之前的 LMD 登陆测试的脚本中先来看看 HTMLTestRunner 是如何使用的,将 login_auto.py 的内容修改如下:

#coding=utf-8
__author__ = 'Administrator'
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
import time
import unittest
import HTMLTestRunner

class login_test_case(unittest.TestCase):
	def setUp(self):
		self.driver = webdriver.Firefox()
		self.driver.maximize_window()
		self.driver.get('http://www.chuangyijia.com/login')
	
	def tearDown(self):
		self.driver.quit()
		
	def test_login(self):
	
		self.driver.find_element_by_id('email').send_keys('810155067@qq.com')
		
		self.driver.find_element_by_id('pwd').send_keys('a654321')
		self.driver.find_element_by_id('submit').click()
		#self.driver.implicitly wait(5)
		time.sleep(3)
		
		WebDriverWait(self.driver,30).until(expected_conditions.visibility_of_element_located((By.CSS_SELECTOR,'.logo')))
		print self.driver.title
		is_title = expected_conditions.title_is(u'首页-创意家') 
		self.assertTrue(is_title(self.driver))
	

if __name__ == '__main__':
	suite = unittest.TestSuite()
	suite.addTest(login_test_case("test_login"))
	Report_file = u"H:\\pydj\\Lmd_auto_test\\Report\\Result.html"
	Rf = file(Report_file,'wb')
	Case_run = HTMLTestRunner.HTMLTestRunner(stream=Rf,title=u'LMD 登陆测试 ',description=u"测试报告输出")
	Case_run.run(suite)

上面的代码只是在原有基础上做了修改,加入了 import HTMLTestRunner 这句,还有后面的

suite = unittest.TestSuite()
创建一个测试套对象

suite.addTest(login_test_case("test_login"))
将登陆的测试用例添加到测试套中

Report_file = u"H:\\pydj\\Lmd_auto_test\\Report\\Result.html" 
设置测试报告输出的位置及文件名

Rf = file(Report_file,'wb')
使用 python 标准库 file 打开测试报告文件, wb 是以二进制写的模式打开。

Case_run=HTMLTestRunner.HTMLTestRunner(stream=Rf,title=u'LMD 登陆测试',description=u"测试报告输出")
创建一个 HTMLTestRunner 的对象,并且将上面打开的用于输出测试报 告的对象传入,title 是 html 报告页面的 title,description 对测试 报告的描述

Case_run.run(suite)
开始运行测试套

注意:如果说Rf = file(Report_file,‘wb’)这个file用不了的 用open可以用

### 搭建Python接口自动化测试框架 #### 使用`unittest`和`requests` 为了创建一个有效的接口自动化测试环境,可以采用`unittest`作为基础测试框架,并结合`requests`库来处理HTTP请求。这允许编写结构化的测试案例并轻松发送API调用。 安装必要的包可以通过pip完成: ```bash pip install requests htmltestrunner ``` 接着,在项目目录下建立文件夹结构如下所示: - `tests/`: 存放所有的测试脚本。 - `reports/`: 保存生成的HTML格式测试报告。 对于具体的实现方式,下面是一个简单的例子展示如何构建这样的测试类[^1]: ```python import unittest from HtmlTestRunner import HTMLTestRunner import requests class TestLoanRepayment(unittest.TestCase): base_url = "http://example.com/api/v1" def test_loan_repayment(self): response = requests.get(f"{self.base_url}/loan-repayment") self.assertEqual(response.status_code, 200) if __name__ == "__main__": suite = unittest.TestLoader().loadTestsFromTestCase(TestLoanRepayment) runner = HTMLTestRunner(output='reports') runner.run(suite) ``` 这段代码定义了一个名为`TestLoanRepayment`的测试类继承自`unittest.TestCase`,其中包含了针对贷款还款功能的一个简单GET请求测试方法。最后部分设置了运行整个套件并将结果导出到指定路径下的HTML文档中[^2]。 #### 跳过特定条件下的测试用例 有时可能希望基于某些条件跳过一些不必要的测试。为此目的,可利用`unittest`提供的几个装饰器[@unittest.skip(reason)][@unittest.skipIf(condition, reason)] [@unittest.skipUnless(condition, reason)] 来灵活控制哪些情况下应该忽略掉这些测试项。 例如: ```python import sys import unittest class SkippingExample(unittest.TestCase): @unittest.skip("demonstrating skipping") def test_nothing(self): self.fail("shouldn't happen") @unittest.skipIf(sys.version_info >= (3, 7), "requires Python 3.6 or lower") def test_format(self): pass @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows") def test_windows_only(self): pass ``` 此段代码展示了三种不同类型的跳过机制的应用场景。 #### 参数化测试数据集 如果想要更高效地管理多个输入组合而不必重复相同的逻辑,则可以考虑引入Pytest及其内置的支持——`parametrize`标记。它使得能够一次性注册多组参数供同一个函数使用而无需复制粘贴相似的代码片段[^3]。 示例如下: ```python import pytest @pytest.mark.parametrize( 'input_data', [ {'amount': 100}, {'amount': 200} ]) def test_with_param(input_data): assert input_data['amount'] > 0 ``` 上述实例说明了怎样通过传递字典列表给定不同的入参来进行批量验证操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZShiJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值