pytest_allure2

作者: 测试游记 | 来源:发表于2018-08-26 00:27 被阅读651次

    pytest_allure2

    闲时又把allure的官方文档中关于pytest的相关部分重新看了一遍,发现之前还是有遗漏了一些有趣的东西。

    今天讲一下在allure的报告中放入一些描述description

    有三种方式可以对用例进行描述:

    1⃣️直接在test中用'''我是注释'''写描述

    2⃣️@allure.description

    3⃣️@allure.description_html

    由于1⃣️和2⃣️有点中规中矩就不说了

    开始介绍一下3⃣️

    首先它的效果如下:

    allure报告2.png

    可以看到报告中的描述部分变成了较人性化的展示

    下面开始写脚本实现

    Html文件编写

    写一个只有一个表单的html段

    <h1>界面自动化测试-百度搜索</h1>
      <table style="width:100%">
        <tr>
          <th>搜索的内容</th>
          <th>预计结果</th>
        </tr>
        <tr align="center">
          <td>{}</td>
          <td>OK</td>
        <tr align="center">
          <td>{}</td>
          <td>OK</td>
        <tr align="center">
          <td>{}</td>
          <td>OK</td>
        <tr align="center">
          <td>{}</td>
          <td>OK</td>
        </tr>
      </table></pre>
    

    这段代码通过浏览器解析后就是一个简单的表格了,由于前端能力大概就这样了所以先这样了

    测试环境准备

    首先是打开浏览器,使用了requesaddfinalizer注册了一个环境清理的函数,函数closemydriver会在测试完之后执行,也就是关闭chrome浏览器

     @pytest.fixture(scope='module')
      @allure.step('打开浏览器')
      def mychromedriver(request):
          driver = webdriver.Chrome()
          driver.implicitly_wait(8)
          driver.get('https://www.baidu.com')
          def closemydriver():
              driver.close()
          request.addfinalizer(closemydriver)
          return driver
    

    测试数据

    由于pytest奇怪的机制,只能人工的准备好待测试的数据

    data = ['selenium','qq','2018','8月']
    

    使用fixture遍历

    装饰器中将mysearch定义为module级别的,其实也没啥用,function效果也是一样

    遍历的数据params是之前的data,并用ids给用例起了几个名字

    函数主体中用allure.attach打印了正在测试的数据

    接下来几行selenium的简单操作,然后把页面的标题和正在测试的数据进行了返回

    @pytest.fixture(scope='module',params=data,ids=['test search selenium','test seatch qq','test search 2018','test search 8月'])
      def mysearch(mychromedriver,request):
          allure.attach("用例参数", "{0}".format(request.param))
          mychromedriver.find_element_by_id('kw').clear()
          mychromedriver.find_element_by_id('kw').send_keys(request.param)
          mychromedriver.find_element_by_id('su').click()
          time.sleep(2)
          return mychromedriver.title,request.param
    

    开始测试

    把刚才的html一股脑的塞给@allure.description_html就好了

    下面几个是feature,story,testcase是用例的层级关系看到报告中的对于展示内容就知道是什么了,口头上难以描述

    测试主体简单的进行了网页标题与搜索内容的校验

    @allure.description_html("""
      <h1>界面自动化测试-百度搜索</h1>
      <table style="width:100%">
       <tr>
       <th>搜索的内容</th>
       <th>预计结果</th>
       </tr>
       <tr align="center">
       <td>{}</td>
       <td>OK</td>
       <tr align="center">
       <td>{}</td>
       <td>OK</td>
       <tr align="center">
       <td>{}</td>
       <td>OK</td>
       <tr align="center">
       <td>{}</td>
       <td>OK</td>
       </tr>
      </table>""".format(data[0],data[1],data[2],data[3]))
      @allure.feature("界面自动化测试")
      @allure.story("界面自动化测试_baidu")
      @allure.testcase("用例名:打开百度并搜索")
      def test_openweb(mysearch):
          title = mysearch[0]
          if mysearch[1] in title:
              ulRet = 1,'正常打开网页并完成搜索'
          else:
              ulRet = 0,'打开网页搜索失败'
          assert ulRet
    

    运行如下语句就能产生报告并在页面展示了

      pytest test_1.py --alluredir=./my_allure_results
      allure serve ./my_allure_results
    

    效果图

    allure报告.png

    全部代码

      #!/usr/bin/env python
      # -*- coding:utf-8 -*-
      #Author:zhongxin 
      #datetime:2018/8/25 下午11:11
      import allure
      import pytest
      import time
      from selenium import webdriver
      ​
      @pytest.fixture(scope='module')
      @allure.step('打开浏览器')
      def mychromedriver(request):
          driver = webdriver.Chrome()
          driver.implicitly_wait(8)
          driver.get('https://www.baidu.com')
          def closemydriver():
              driver.close()
          request.addfinalizer(closemydriver)
          return driver
      ​
      data = ['selenium','qq','2018','8月']
      @pytest.fixture(scope='module',params=data,ids=['test search selenium','test seatch qq','test search 2018','test search 8月'])
      def mysearch(mychromedriver,request):
          allure.attach("用例参数", "{0}".format(request.param))
          mychromedriver.find_element_by_id('kw').clear()
          mychromedriver.find_element_by_id('kw').send_keys(request.param)
          mychromedriver.find_element_by_id('su').click()
          time.sleep(2)
          return mychromedriver.title,request.param
      ​
      ​
      @allure.description_html("""
      <h1>界面自动化测试-百度搜索</h1>
      <table style="width:100%">
       <tr>
       <th>搜索的内容</th>
       <th>预计结果</th>
       </tr>
       <tr align="center">
       <td>{}</td>
       <td>OK</td>
       <tr align="center">
       <td>{}</td>
       <td>OK</td>
       <tr align="center">
       <td>{}</td>
       <td>OK</td>
       <tr align="center">
       <td>{}</td>
       <td>OK</td>
       </tr>
      </table>""".format(data[0],data[1],data[2],data[3]))
      @allure.feature("界面自动化测试")
      @allure.story("界面自动化测试_baidu")
      @allure.testcase("用例名:打开百度并搜索")
      def test_openweb(mysearch):
          title = mysearch[0]
          if mysearch[1] in title:
              ulRet = 1,'正常打开网页并完成搜索'
          else:
              ulRet = 0,'打开网页搜索失败'
          assert ulRet
    

    相关文章

      网友评论

        本文标题:pytest_allure2

        本文链接:https://www.haomeiwen.com/subject/gpyniftx.html