Web自动化测试(进阶学习篇二)

目录

1.自动化断言

1.1断言概念

1.2断言介绍

1.3代码案例

2.自动化报告

2.1HTMLTestRunner

2.1.1HTMLTestRunner 的下载和安装

2.1.2HTMLTestRunner使用

2.2BeautifulReport

2.2.1BeautifulReport的下载和安装

2.2.2BeautifulReport使用步骤

2.2.3代码案例

2.3pytest-Allure

2.3.1Allure下载和安装

2.3.2Allure查看和生成报告

2.3.3代码案例

2.3.4 allure特性

1.自动化断言

1.1断言概念

       基于selenium+python的自动化测试,断言是assert(unittest 框架的 TestCase 类提供)。断言执行失败则会抛出一个异常,此时没有达到我们预期结果,则测试用例失败;执行成功即达到我们的预期结果。简言之断言就是比较我们的期望结果与实际结果,相等则测试用例通过。

1.2断言介绍

  • assertEqual(a,b,[msg=‘测试失败时打印的信息’]): 断言a和b是否相等。
  • assertNotEqual(a,b,[msg=‘测试失败时打印的信息’]): 断言a和b是否相等,不相等则通过。
  • assertTrue(x,[msg=‘测试失败时打印的信息’]): 断言x是否True,是则测试用例通过。
  • assertFalse(x,[msg=‘测试失败时打印的信息’]):断言x是否False,是则测试用例通过。
  • assertIs(a,b,[msg=‘测试失败时打印的信息’]): 断言a是否是b,是则测试用例通过。
  • assertNotIs(a,b,[msg=‘测试失败时打印的信息’]):断言a是否是b,不是则测试用例通过。
  • assertIsNone(x,[msg=‘测试失败时打印的信息’]):断言x是否None,是None则通过。
  • assertIsNotNone(x,[msg=‘测试失败时打印的信息’]):断言x是否None,不是None则通过。
  • assertIn(a,b,[msg=‘测试失败时打印的信息’]): 断言a是否在b中,在b中则测试用例通过。
  • assertNotIn(a,b,[msg=‘测试失败时打印的信息’]): 断言a是否在b中,不在b中则通过。
  • assertIsInstance(a,b,[msg=‘测试失败时打印的信息’]):断言a是否是b的一个实例,是则测试用例通过。
  • assertNotIsInstance(a,b,[msg=‘测试失败时打印的信息’]):断言a是否是b的一个实例,不是则测试用例通过。

1.3代码案例

import unittest
class Test(unittest.TestCase):
	def setUp(self):
		pass
	def test_case(self):
		self.a = "hello"
		self.b = "hello world"
		self.assertIn(self.a,self.b,msg="a is in b")
	def tearDown(self):
		pass
if __name__ == "__main__":
	unittest.main()

2.自动化报告

2.1HTMLTestRunner

2.1.1HTMLTestRunner 的下载和安装

下载地址:HTMLTestRunner下载

安装:HTMLTestRunner 是一个独立的 HTMLTestRunner.py 文件,既可以当作 Python 的第三方库来使用,也可以当作项目的一部分来使用。只需要把HTMLTestRunner.py 文件放在python的安装目录下即可,如:D:\install\python\Lib\site-packages

2.1.2HTMLTestRunner使用

HTMLTestRunner 类的部分实现,__init__()初始化方法的参数:

  • stream:指定生成 HTML 测试报告的文件,必填。
  • verbosity:指定日志的级别,默认为 1。如果想得到更详细的日志,则可以将参数修改为 2。
  • title:指定测试用例的标题,默认为 None。
  • description:指定测试用例的描述,默认为 None

2.1.3代码案例

         创建一个简易计算器程序中的加、减、乘、除并编写单元测试代码,生成测试报告。项目层次结构如下:

 Caculator.py代码

# 简易计算器程序中的加、减、乘、除代码。

class Caculator:
    def add(self, a, b):
        return a + b

    def substract(self, a, b):
        return a - b

    def multi(self, a, b):
        return a * b

    def divide(self, a, b):
        return a / b

 test_Caculator.py代码

import unittest
from com.test_sanmu.caculator import Caculator


class CaculatorTest(unittest.TestCase):
    @classmethod
    def setUp(self) -> None:
        self.cacylator = Caculator
    def test_caculator1(self):
        self.assertEqual(5,self.cacylator.substract(self,6,1))
        self.assertEqual(3,self.cacylator.multi(self,1,3))
        self.assertEqual(5,self.cacylator.divide(self,10,2))
        self.assertEqual(6,self.cacylator.add(self,3,3))
    @classmethod
    def tearDown(self) -> None:
        print("断言结束")

if __name__ == '__main__':
      unittest.main()

reporter.py 

'''
执行多个测试文件
discover(start_dir,pattern='test*.py',top_level_dir=None)
start_dir :待测试的模块名或测试用例目录。
pattern='test*.py' :测试用例文件名的匹配原则。此处匹配文件名以“test”开头
的“.py”类型的文件,星号“*”表示任意多个字符。
top_level_dir=None:测试模块的顶层目录,如果没有顶层目录,则默认为 None。
'''
import os
import unittest
import HTMLTestRunner
import time

# 用例路径
case_path = os.path.join( os.getcwd(), 'test_sanmu' )
# 报告存放路径
report_path = os.path.join( os.getcwd(), 'reports' )

if not os.path.exists( report_path ):
    os.mkdir( report_path )


def all_case():
    suits = unittest.defaultTestLoader.discover( case_path, pattern="test*.py", top_level_dir=None )
    return (suits)


if __name__ == '__main__':
    # 1、获取当前时间,便于生成报告,不易被覆盖。
    now_time = time.strftime( "%Y-%m-%d-%H_%M_%S", time.localtime( time.time() ) )
    # 2、html报告文件路径
    report_abspath = os.path.join( report_path, "result_" + now_time + ".html" )
    # 3、打开一个文件,将result写入此file中
    fp = open( report_abspath, "wb" )
    runner = HTMLTestRunner.HTMLTestRunner( stream=fp, title='测试报告', description="运行环境:Sanmu Windows 10, Chrome 浏览器",verbosity=2 )
    # 4、调用add_case函数返回值
    runner.run( all_case() )
    fp.close()

生成结果报告 

2.2BeautifulReport

       BeautifulReport是基于Unittest测试框架生成HTML格式的自动化测试报告的报告框架,既简洁又美观的HTML模板,将生成的结果添加到模板中,在指定目录下生成HTML格式报告。

2.2.1BeautifulReport的下载和安装

下载地址:BeautifunReport下载

安装:下载zip格式之后解压,把整个文件加载到python的安装目录下即可,如:D:\install\python\Lib\site-packages

2.2.2BeautifulReport使用步骤

1、组装测试套件: 把要执行的测试用例放入到测试套件中
2、准备测试报告文件(路径+报告文件名.html) 
3、批量执行测试用例,把结果写入到测试报告文件中。

报告参数说明:

  • 1、filename 报告的文件名
  • 2、description: 生成文件的注释
  • 3、report_dir: 生成report的文件存储路径 
  • 4、theme: 报告主题

2.2.3代码案例

测试用例同上,Caculator.py实现和test_Caculator.py单元测试,生成报告代码如下:

import time
import unittest
import os
from BeautifulReport import BeautifulReport

# 用例路径
case_path = os.path.join( os.getcwd(), 'test_sanmu' )
# 报告存放路径
report_path = os.path.join( os.getcwd(), 'reports' )

if not os.path.exists( report_path ):
    os.mkdir( report_path )

suits = unittest.defaultTestLoader.discover(case_path, 'test*.py', None)
now_time = time.strftime( "%Y-%m-%d-%H_%M_%S", time.localtime( time.time() ) )
filename = 'Sanmu测试报告' + str(now_time)
BeautifulReport(suits).report(filename=filename,description='beautifual报告',log_path=report_path)

 生成结果报告

2.3pytest-Allure

      Allure是强大的报告框架,他结合Pytest单元测试框架使用能够详细的展示测试用例的执行情况,以及展示各种独特的分析结果,同时还支持多种语种的切换,目前为止功能最强大,但操作相对较为复杂。

2.3.1Allure下载和安装

下载地址:Allure下载

安装:因为,Allure是java语言开发,所以确保自己环境有jdk1.8版本及以上,然后解压文件 -> 进入bin目录 -> 运行allure.bat-> 把bin目录加入PATH环境变量-> cmd输入allure --version验证是否配置成功 -> 安装插件:pip install allure-pytest

2.3.2Allure查看和生成报告

(1)生成:pytest [测试文件]  --alluredir=./result #--alluredir用于指定存储测试结果的路径

(2)查看:a.直接打开默认浏览器展示报告:allure serve ./result/

                    b.从结果生成报告:生成报告,allure generate ./result/ -o ./report/ --clean (覆盖路径加--clean) -> 打开报告allure open -h [生成文件的IP] -p [生成文件的端口] ./report/,例如我的是:10.7.129.39:42035

2.3.3代码案例

import allure
import pytest
from selenium import webdriver
import time

from selenium.webdriver.common.by import By


@allure.feature( "百度搜索" )
@pytest.mark.parametrize( 'test_data', ['allure', 'pytest', 'Sanmu'] )#参数化
def test_steps_demo(test_data):
    with allure.step( "打开百度网页" ):
        driver = webdriver.Chrome()
        driver.get( "http://www.baidu.com" )

    with allure.step( "搜索" ):
        driver.find_element( By.ID, "kw" ).send_keys( test_data )
        time.sleep( 2 )
        driver.find_element( By.ID, "su" ).click()
        time.sleep( 2 )

    with allure.step( "保存图片" ):
        driver.save_screenshot( "./result/result.png" )
        allure.attach.file( "./result/result.png", attachment_type=allure.attachment_type.PNG )
        allure.attach( '<head></head><body>首页</body>', 'Attach with HTML type', allure.attachment_type.HTML )

    with allure.step( "退出浏览器" ):
        driver.quit()

 运行:

 生成报告如下:

2.3.4 allure特性

  • @allure.feature(‘功能名称’):相当于 testsuite
  • @allure.story(’子功能名称‘):对应这个功能或者模块下的不同场景,相当于 testcase
  • @allure.step('步骤'):测试过程中的每个步骤,放在具体逻辑方法中
    • allure.step('步骤') :只能以装饰器的形式放在类或者方法上面
    • with allure.step:可以放在测试用例方法里面
  • @allure.attach('具体文本信息'):数据,文本,图片,视频,网页
  • @link, @issue, @testcase:可以在测试报告中添加链接、bug地址、测试用例地址。
  • @ allure.severity按重要性级别来标记,有5种级别:
    • Blocker级别:阻塞
    • Critical级别:严重
    • Normal级别:正常
    • Minor级别:不太重要
    • Trivial级别:不重要

猜你喜欢

转载自blog.csdn.net/m0_58807719/article/details/130048410