UI自动化测试框架(含HTML、EXCEL测试报告)

●话不多说,先看HTML测试报告

UI自动化测试框架(含HTML、EXCEL测试报告)_第1张图片
UI自动化测试框架(含HTML、EXCEL测试报告)_第2张图片

●接下来掌握如何使用本套框架

开源地址:https://github.com/houc/UI

一、 创建测试的项目与所需必要参数(先把开源的代码块下载下来)

1、下载下来后,建议使用pycharm打开,并依次进入config->conf.yaml并打开进行编辑操作

base_url: # 不可更名称
  new_backstage: http://1904155033.pre-pool1-site.make.yun300.cn # 被测试项目前缀地址
  backstage_user: 13120396777  # 需要登录首页账号
  backstage_password: test123456 # 需要登录首页的密码
excel_parameter: # 不可更名称
  project_name: door_ui          # 项目名称(需要手动创建这个项目名称,在UI目录下创建即可。另外在这个项目名称下还需要创建common.py和common.yaml)
  test_version: V0.0.0   # 测试时的版本号(主要用于测试报告中体现)
  science: 预发布   # 测试环境(主要用于测试报告中体现)
report: # 不可更名称
  ip: 171.221.241.20  # 服务器ip,为空传本地IP地址,本地IP地址输入后,端口也需要传入,否则广域网无法正常预览测试报告
  port: 20019 # 端口,
  save: 7 # 报告存放时间(天)
config: # 不可更名称
  thread:  # True,开启多线程(注意开启此项会大量占用CPU资源);False,不采用多线程执行
  token_keys: TOKEN   # token表示key名
  level: 10                   # 日志等级
  logs_save: 5          # 日志最长保存天数
  re: '*_st.py'         # 正则匹配执行的py,如果想只执行一个py的数据,那么改一下此处的后缀名即可!
  task_time: "9:04"        # 定时任务如:单纯数字默认为分钟如:1-99999...,想每天18:20运行,即[1day|18:20]。 为每周时,切勿加时间如:[3week|07:58]这样会使程序报错。固定每周3十二点半执行则:[1wednesday|12:30]
  browser: False         # 浏览器隐藏执行开关,隐藏: True,不隐藏: False;无头浏览超慢,建议使用有头
  logo_url:  # 项目logo连接
  re_run_count: 2         # 失败重跑次数 1 表示1次,从1开始,并非从0开始
  re_sleep: 2        # 失败重跑等待时间,单位为 秒  建议不超过300秒
  module_run: test_debug # 指定需要运行的模块,示例:login
  token_invalid: 6      # 接口token登录几个小时后失效,并重新登录获取新的token
  skip_module: {}   # 跳过模块>示例:{ValidateLogin_st: 这是原因, customer_st: 这是原因}
send_email: # 不可更名称
  server: smtp.gouuse.cn                # 邮件发送的服务器
  port: 25                                  # 发送邮件端口
  send_account: houchao@gou.cn        # 发送账号
  send_password: Li123456 #                # 发送密码
  receiver: [1063116271@qq.com]  # 接收人
  CC: [houchao@gou.cn]  # 抄送人
sql: # 不可更名称   这里是写好了对应方法建议不要去动它
  name_db: 'case_db'                    # 数据库
  address: localhost                    # 数据库地址,此处为本地数据库地址
  sql_table: DROP TABLE IF EXISTS result                    # 表是否存在
  sql_create_title:  CREATE TABLE result (
                     case_catalog longtext,
                     case_level longtext,
                     case_module longtext,
                     case_name  longtext,
                     case_url longtext,
                     case_scene  longtext,
                     case_status longtext,
                     case_results longtext,
                     case_error_reason longtext,
                     case_insert_parameter longtext,
                     case_wait_time longtext,
                     case_img longtext,
                     case_author longtext,
                     case_remark longtext,
                     insert_time timestamp
                     )              # 插入表头
  sql_query: SELECT * FROM result                           # 查询result里面的所有数据
  sql_insert: INSERT INTO result(case_catalog,
                                 case_level,
                                 case_module,
                                 case_name,
                                 case_url,
                                 case_scene,
                                 case_status,
                                 case_results,
                                 case_error_reason,
                                 case_insert_parameter,
                                 case_wait_time,
                                 case_img,
                                 case_author,
                                 case_remark,
                                 insert_time
                                 ) VALUES('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s') # 插入数据
  sql_delete: DELETE FROM result WHERE 1=1                 # 数据库全部清除数据
  sql_update: UPDATE result SET %s WHERE %s                # 更新数据
  sql_create_list: create database %s character set utf8  # 创建数据库

2、创建好项目并配置好conf.yaml中参数后,接下来就可以直接编写用例了,依次打开你刚创建的项目->common.yaml

door_ui: # 项目名称必须要与conf.yaml->project_name && 创建项目名称一一对应
  product_manage:  # 测试的模块,这里如一级目录产品管理	
    - product_exist: # 测试模模块,这里如二级目录产品是否存在
      url: # 整个测试下的的后缀url
      assembly: 产品管理-产品  # 整个用例下取一个模块的名称,主要用于报告体现
      className: TestProduct  # 类名
      funName:
        - test_product_is_exist: { # 测试方法名称
          url: "/managePanel/product/list?appId=2", # 这条用例下下的后缀url
          assembly:, # 这条用例下的模块
          author: 小明, # 编写用例负责人,用于报告体现
          level:, # 用例等级,用于报告体现
          scene: "验证后台增加产品前台是否存在,并且同时验证产品中的图片是否前台展示\n # 场景用于报告体现
          case_remark: "场景中执行完成后,回到前台校验是否正确", # 这条用例中的备注用于报告体现
          asserts: True, # 这条用例的断言
          }
          # 这是这个模块下的下一条用例
          test_product_is_exist_01: { # 测试方法名称
          url: "/managePanel/product/list?appId=2", # 这条用例下下的后缀url
          assembly:, # 这条用例下的模块
          author: 小明, # 编写用例负责人,用于报告体现
          level:, # 用例等级,用于报告体现
          scene: "验证后台增加产品前台是否存在,并且同时验证产品中的图片是否前台展示\n # 场景用于报告体现
          case_remark: "场景中执行完成后,回到前台校验是否正确", # 这条用例中的备注用于报告体现
          asserts: True, # 这条用例的断言
          }
     # 产品管理下的下一级模块
    - product_import: 
      url:
      assembly: 产品管理-产品
      className: TestProductImport
      funName:
        - test_product_import: {
          url: "/managePanel/product/list?appId=2",
          assembly:,
          author: 小花,
          level:,
          scene: "导入产品,是否成功\n
          case_remark: "",
          asserts: True,
          }

3、编辑完用例后,记得要运行一下initialization.py,运行它之后会自动生成对应的用例,生成完成后可以直接维护对应用例

import unittest
import time
import os

from config_path.path_file import PATH
from model.MyUnitTest import UnitTests
from model.CaseSupport import test_re_runner, check_upper_is_ok
from model.SkipModule import Skip, current_module
from door_ui.test_debug.currency import TestDebugElement

_SKIP = Skip(current_module(PATH(__file__))).is_skip
_SKIP_REASON = Skip(current_module(PATH(__file__))).is_reason


@unittest.skipIf(_SKIP, _SKIP_REASON)
class Debug(UnitTests):
    """
    :param: RE_LOGIN:  需要切换账号登录,当RE_LOGIN = True时,需要将LOGIN_INFO的value值全填写完成,
                      如果请求的账号中只有一家公司,那么company中的value就可以忽略不填写,否则会报错...
    :param: MODULE: 为当前运行的模块,根据当前运行的模块调用common中的对应的用例方法,需保留此变量方法
    :param: toke_module: 读取token的node
    :param: BROWSER: True执行浏览器,默认为开启
    """
    RE_LOGIN = False
    BROWSER = False
    LOGIN_INFO = {"account": None, "password": None, "company": None}
    MODULE = os.path.abspath(__file__)
    toke_module = str(MODULE).split('\\')[-1].split('.')[0]
    
    set_up = UnitTests.setUp

    @test_re_runner(set_up, retry_count=1) # 失败重跑方法
    @check_upper_is_ok('test_all_5') # 检查上一条用例是否失败或者错误,如果是失败或者错误,则跳过这条用例,但是需要根据unittest执行顺序进行编写
    def test_all(self):
        """
        使用接口验证openapi+redis->>清理Redis缓存
        """
        self.first = s
        self.assertEqual(self.first, self.second)
        
    @test_re_runner(set_up)
    @check_upper_is_ok('test_all_1')
    def test_all_2(self):
        """
        使用接口验证openapi+redis->>清理Redis缓存
        """

        # self.first = False
        self.assertEqual(self.first, self.second)

4、想发送报告和邮箱,最后则运行runner.py这个方法,想定时运行则timing_run.py这个方法

如有疑问欢迎留言或者联系本人

你可能感兴趣的:(UI自动化测试报告,接口自动化测试报告,UI自动化框架,接口自动化框架)