python+selenium(高级)

主要记录Unittest框架和生成html测试报告

为什么使用UnitTest框架?

1. 能够组织多个用例去执行
2. 提供丰富的断言方法
3. 提供丰富的日志与测试结果

 Unittest的核心要素

1. TestCase

2.TestSuite

3.TextTestRunner (测试执行)

4.Fixture (对一个测试用例环境的搭建和销毁就是一个fixture)

 

2.1 TestCase

说明:(翻译:测试用例)一个TestCase就是一条测试用例;
使用:
    1. 导包:import unittest             --> 导入unitest框架
    2. 继承:unittest.TestCase             --> 新建测试类继承unittest.TestCase

提示:
    1). 测试用例:在自动化测试中,一条用例就是一个完整的测试流程;                
    2). 测试方法名称命名必须以test开头;
       (原因:unittest.TestCase类批量运行的方法是搜索执行test开头的方法)

2.2 TestSuite

说明:(翻译:测试套件)多条测试用例集合在一起,就是一个TestSuite;
使用:
    1. 实例化:     suite=unittest.TestSuite()                    
                 (suite:为TestSuite实例化的名称)
    2. 添加用例:suite.addTest("ClassName(MethodName)")    
                 (ClassName:为类名;MethodName:为方法名)

    3. 添加扩展:suite.addTest(unittest.makeSuite(ClassName))
                 (搜索指定ClassName内test开头的方法并添加到测试套件中)

提示:
    1). 一条测试用例(.py)内,多个方法也可以使用测试套件
    2). TestSuite需要配合TextTestRunner才能被执行

2.3 TextTestRunner

说明:(翻译:测试执行)是用来执行测试用例套件
使用:
    1. 实例化: runner=unittest.TextTestRunner()
                (runner:TextTestRunner实例化名称)
    2. 执行:    runner.run(suite)
                (suite:为测试套件名称)

2.4 Fixture

说明:是一个概述,对一个测试用例环境的搭建和销毁就是一个Fixture;
使用:
    1. 初始化(搭建):def setUp(self)        --> 首先执行
       (setUp:此方法继承于unittest.TestCase)        
    2. 结束(销毁):    def tearDown(self)        --> 最后执行
       (tearDown:此方法继承于unittest.TestCase)
提示:
    1. 必须继承unittest.TestCase类,setUp、tearDown才是一个Fixture;
    2. setUp:一般做初始化工作,比如:实例化浏览器、浏览器最大化、隐式等待设置
    3. tearDown:一般做结束工作,比如:退出登录、关闭浏览器
    4. 如果一个测试类有多个test开头方法,则每个方法执行之前都会运行setUp、结束时运行tearDown

 断言

 

基本布尔型断言(掌握常用即可)

说明:结果只有True和False
序号断言方法断言描述
1assertEqual(arg1, arg2, msg=None)验证arg1=arg2,不等则fail 【掌握】
2assertNotEqual(arg1, arg2, msg=None)验证arg1 != arg2, 相等则fail
3assertTrue(expr, msg=None)验证expr是true,如果为false,则fail
4assertFalse(expr,msg=None)验证expr是false,如果为true,则fail
5assertIsNone(expr, msg=None)验证expr是None,不是则fail
6assertIsNotNone(expr, msg=None)验证expr不是None,是则fail
7assertIn(arg1, arg2, msg=None)验证arg1是arg2的子串,不是则fail【掌握】

 

...
    # 获取登陆信息
    text = self.driver.find_element_by_css_selector(".loginfo").text
    print("登陆成功信息为:",text)
    try:
        # 使用断言 判断text是否包含admin字符
        self.assertIn("admin",text)
    except AssertionError:
        driver.get_screenshot_as_file("../Image/02img.jpg")
        # 抛出异常
        raise
...

为什么要生成测试报告

1. 测试报告是本次测试目的最终体现形态
2. 测试报告内包含了有关本次测试用例的详情

 HTML生成报告方式

1. Export Test Results (UnitTest 自带)
2. HTMLTestRunner(第三方模板)【重点】

2.1 Export Test Results (自带)

 

自带报告生成操作图

 

    提示:适合单条用例执行时使用

2.2 HTMLTestRunner【重点】

 

1.1 测试报告 生成步骤分析

HTMLTestRunner.zip

1. 复制HTMLTestRunner.py文件到项目文件夹
2. 导入HTMLTestRunner、UnitTest包    
3. discover加载要执行的用例
      (discover=unittest.defaultTestLoader.discover(test_dir,pattern="test*.py"))
4. 设置报告生成路径和文件名
   (file_name=file_dir+nowtime+"Report.html")
5. 打开报告 with open(file_name,'wb') as f:
6. 实例化HTMLTestRunner对象:runner=HTMLTestRunner(stream=f,[title],[description])
    参数说明:
               (stream:文件流,打开写入报告的名称及写入编码格式)
               (
                       [],为可选;
                       title为报告标题,如XXX自动化测试报告
                       description:为说明;比如操作系统、浏览器等版本
               )
7. 执行:runner.run(discover)

1.2 实现代码

import time
from CodeEdit.LX04.Tools.HTMLTestRunner import HTMLTestRunner
import unittest
# 加载当前目录
test_dir='.'
# 加载当前目录下iweb开头的.py文件
discover=unittest.defaultTestLoader.discover(test_dir,pattern="test*.py")
if __name__ == '__main__':
    # 定义报告目录
    file_dir="../Report/"
    # 定义报告名称格式
    nowtime=time.strftime("%Y-%m-%d %H_%M_%S")
    # 报告完整路径和名称
    file_name=file_dir+nowtime+"Report.html"
    with open(file_name,"wb")as f:
        # 实例化HTMLTestRunenr对象,传入报告文件流f
        runner=HTMLTestRunner(stream=f,title="iweb_shop项目Web自动化测试报告",description="测试用例共计2条")
        runner.run(discover)

1.3 总结

1. HTMLTestRunner作用
2. 使用HTMLTestRunner生成报告操作步骤

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值