• 接口自动化测试小结


    一、什么项目适合做自动化测试?(摘自虫师博客)

    软件需求变动不频繁

      测试脚本的稳定性决定了自动化测试的维护成本。如果软件需求变动过于频繁,测试人员需要根据变动的需求来更新测试用例以及相关的测试脚本,而脚本的维护本身就是一个代码开发的过程,需要修改、调试,必要的时候还要修改自动化测试的框架,如果所花费的成本不低于利用其节省的测试成本,那么自动化测试便是失败的。

      项目中的某些模块相对稳定,而某些模块需求变动性很大。我们便可对相对稳定的模块进行自动化测试,而变动较大的仍是用手工测试。

     

    项目周期较长

        由于自动化测试需求的确定、自动化测试框架的设计、测试脚本的编写与调试均需要相当长的时间来完成。这样的过程本身就是一个测试软件的开发过程,需要较长的时间来完成。如果项目的周期比较短,没有足够的时间去支持这样一个过程,那么自动化测试便成为笑谈。

     

    自动化测试脚本可重复使用

      自动化测试脚本的重复使用要从三个方面来考量,一方面所测试的项目之间是否很大的差异性(如C/S系统和B/S系统的差异);所选择的测试工具是否适应这种差异;最后,测试人员是否有能力开发出适应这种差异的自动化测试框架。

    二、web 接口测试分类与测试要点

    web 接口测试分类:

    服务器接口测试,是测试浏览器与服务器的接口

    外部接口测试,典型例子是第三方登录

    web接口测试测试要点:

    1、请求是否正确,默认请求成功是200,如果请求错误也能返回404、500等

    2、检查返回数据的正确性与格式;json是一种非常常见的格式

    3、接口的安全性,一般web都不会暴露在网上任意被调用,需要做一些限制,比如鉴权或认证

    4、接口的性能,web接口同样注重性能,这影响用户的使用体验

     

    三、基于python 自带的单元测试框架unittest 编写的接口测试框架特点:

    a . 支持简单易用的表格型语法,使得可以用统一方式创建测试用例(.yml / .json 文件)

    b . 提供HTML的简单易读的report 和日志结果文件

    c . 平台和应用相互独立(平台:测试框架本身;应用:被测程序)

    d . 提供XML格式的输出文件,非常容易进行持续集成

    e . 支持创建数据驱动的测试用例 

    f . 支持代码驱动(比如有关联的接口)

    g . 提供test case和test suite级别的setup和teardown

    注:

    数据驱动:因为数据的改变导致结果的改变(参数化)

    数据的改变(更新)驱动自动化的执行,从而引起结果改变

    四、基于python 自带的单元测试框架unittest 编写的接口测试架构

    分为三层,分别是用例层、控制层、引擎层(驱动层)

    用例层:用例层支持 yml文件 json文件 用它来写用例的好处是灵活,字段不需要像excel里面那样

    控制层:控制层用来发邮件与 产生报告

    引擎层(驱动层):用python 自带的requests 模块调用接口,封装了各种方法,支持加cookie header 等的各种入参类型

     五、完整的测试流程

    A . 编写测试用例

    直接使用Python自带的单元测试框架unittest来编写自动化测试用例,利用其组织测试用例,断言预期结果,以及批量执行测试用例等功能,可以很好的进行Web自动化测试的开发

    代码参考个人git 仓库:https://coding.net/u/chendai21/p/llq-code/git

    B. 执行测用例, 执行完毕后自动生成测试报告,发送邮件

    整个代码执行过程可以分成二个步骤:

        1.通过unittest框架的discover()找到匹配的测试用例(以test_开头的脚本),由BeautifulReport 的BeautifulReport 方法执行测试用例并生成最新的测试报告。

    前置条件:把BeautifulReport文件解压后拷贝到External Libraries—>site-packages里面,主要用于生成HTML测试报告,以便生成一份通俗易懂的测试报告来展示自动化测试成果。

        2.先封装sendmail类再定义send_report()函数(发送指定路径下某文件的邮件),将得到的最新测试报告的完整路径传给sendmail,实现发邮件功能。

    代码如下:

    import sys,os
    BASE_PATH = os.path.dirname(os.path.dirname(
    os.path.abspath(__file__)))
    sys.path.insert(0,BASE_PATH)
    from common.tools import GetCase
    from conf.setting import PY_PATH,REPORT_PATH
    import unittest,BeautifulReport
    def send_report(all_count, pass_count, report_file=None):
    title = time.strftime('%Y-%m%d %H%M%S') + '接口测试报告'
    content = '''
    Dear all:
    本次接口测试共运行{all}条测试用例,通过{ok}条,失败{fail}条。
    测试报告详细见附件。
    '''.format(all=all_count, ok=pass_count, fail=(all_count - pass_count))
    # 发送测试报告
    m = SendMail(MAIL_USER_INFO, MAIL_PASSWD, RECV, title, content, file=report_file)
    m.send_mail()

    def run():
    g = GetCase()
    g.creat_py() #生成测试文件
    suite = unittest.TestSuite() #创建测试套装
    all_cases = unittest.defaultTestLoader.discover(PY_PATH,'Test*.py') #读取测试用例
    [suite.addTests(case) for case in all_cases]
    report_html = BeautifulReport.BeautifulReport(suite)
    report_filename = '{date}_TestReport.html'.format(date=time.strftime('%Y%m%d%H%M%S'))
    # 生成报告的文件名格式20180329190544_TestReport.html
    report_html.report(filename=report_filename, description='用例描述', log_path=REPORT_PATH)
    send_report((report_html.failure_count + report_html.success_count), report_html.success_count,
    os.path.join(REPORT_PATH, report_filename))
    # BeautifulReport 生成的报告 用点就能看到它的属性了(success_count、failure_count)
    # 实际上BeautifulReport是一个类 然后实例化后有对应的实例变量

    run()

    生成的测试报告如下图:

    收到的邮件如下图:

     

  • 相关阅读:
    SSR 第二篇,搭建Vue SSR程序
    SSR 第一篇,搭建简单的SSR程序
    数组的所有方法整理学习
    CustomEvent 使用
    VUE CSS module
    eslint Expected linebreaks to be 'LF' but found 'CRLF'
    利用Object.freeze() 提升性能
    vue 项目开启gzip 压缩和性能优化
    [转]Ext Grid控件的配置与方法
    ExtJS renderer(转)
  • 原文地址:https://www.cnblogs.com/chendai21/p/8708665.html
Copyright © 2020-2023  润新知