自动化接口测试用例怎么写?自动化接口测试的步骤

dylinchen 285 2022-07-11


自动化测试用例要怎么写

  自动化测试, 不是测试功能,可不可用。 而是一个流程上有没有问题,能不能通过。
  上一片说了, 接口的测试用例, 不用像功能测试用例那样, 一个功能写N多个测试点, 因为用自动化测试一个功能的所有情况, 相当费时间.
  接口的测试用例, 其实就写一个功能的主要功能, 或者是影响流程的多个功能,

  说的在详细点, 就是 比如审核功能, 通过, 和退回两个功能, 退回需要填写审核意见 。
  那我们的用例就 只要 有两个, 1 是通过,2 是退回加审核意见。(不用写退回然后不写审核意见能不能过,想写的话也随意,就是费点时间。)

测试用例

这是我用的测试用例, 期中每一步操作, 都给出测试数据,用来在系统上添加一个商品,然后一大堆操作,因为不是讲测试点,就是给出一个用例来意思意思,我就不多说,想表达的意思打达到了就好了。
在这里插入图片描述

读取测试用例的脚本

 这个是关键,上面那个很明显是用 excel 写的要怎么给程序使用呢下面就要写一下了。
我是用 python 脚本写的, 如果看不懂 python 的语言,可以自学, 也可以私信我。

# -*- coding:utf-8 -*-import jsonimport osimport reimport threadingfrom datetime import datetimefrom json import JSONDecodeErrorimport openpyxlimport xlrdfrom openpyxl.styles import NamedStyle, PatternFillfrom xlrd import xldate_as_tuple# 这下面的,是我自己写的几个工具方法,可以给出来,但是需要其他组件# xls_dict 是一个 dict 可以用来修改文件中的一些数据#  my_pow  封装了 pow()函数from config.XLS_DICT import xls_dict, my_pow   

# logger 日志输出组件,可以替换成 print()from utils.Logger_util import logger# execute_sel_sql_return_one 查询数据库的,如果没有可以 写一个空的from utils.Mysql_util import execute_sel_sql_return_one 
# file_isexists输出文件的时候, 判断文件是否已经存在from utils.basics_util import file_isexists# object_dir 一个 str 保存的是路径from variable.basics_var_class import object_dir1234567891011121314151617181920212223242526272829

XLS_DICT 是一个 DICT 可以用来修改文件中的一些数据

要隆重介绍一下这个变量, 别小看他,他可是决定了文件数据转化
比如说,审核接口, 通过,接口传给后台的是1 ,退回是2,但是用例里面, 你能写1,或者2 吗?要写通过,退回。
代码这样写

xls_dict = { 
	“审核结果”:{
		"通过":1,
		"退回":2,
		"":1 # 最后这个是默认值,可以不写
	}}1234567

用例这样写
在这里插入图片描述
运行后的结果:

res = [{"审核结果":1,"oid_审核结果":"通过"},{"审核结果":2,"oid_审核结果":"退回"}]1

源码:下载文件:Read_File_Util.py
(傻笑,要两金币才可以下载!)

在这里插入图片描述
可以看到, 第一行变成了每一个list里边的 key,value 保存的是通过xls_dict 保存的值。还多了一个 oid开头的,保存着文件原本的数据。(注意,key不要写错了,哪怕多了一个空格都算是错的。)

# 这个文件中 最主要的的一个函数,
	@classmethod
    def read_file(cls, file_name,mode_key):
        cls.set_mode_key(mode_key)
        read_work_book = xlrd.open_workbook(file_name)
        sheet_names = read_work_book.sheet_names()
        cls.read_files(file_name,["全局变量"],mode_key)
        cls.read_files(file_name,sheet_names,mode_key)
        cls.get_ref_data(mode_key)
        return cls.get_data(mode_key)12345678910
	@classmethod
    def __read_file(self, file_name, sheet_name):

        """

        :param file_name: xlsx 文件名称 (绝对路径)
        :param sheet_name:
        :return:
        """
        read_work_book = xlrd.open_workbook(file_name)
        read_sheet = read_work_book.sheet_by_name(sheet_name)
        row_num = read_sheet.nrows
        col_num = read_sheet.ncols
        cell_values = read_sheet._cell_values
        cell_values_list = []
        for rd in range(1, len(cell_values)):
            keys = cell_values[0]
            values_dict = {}
            for vl in range(len(keys)):
                # 判断 数据中, 是否有需要引用的数据
                # 无法进行处理, 先进行记录
                if "ref{" in str(cell_values[rd][vl]):
                    self.set_ref_data_log(sheet_name,rd-1,keys[vl])
                # 引用数据记录
                if "{{" in str(cell_values[rd][vl]) and "}}" in str(cell_values[rd][vl]):
                    var_data = {"mode": sheet_name, "rd": rd-1, "vl": keys[vl]}
                    cell_values[rd][vl] = self.get_var_data(self.get_mode_key(),var_data,cell_values[rd][vl])
                # xls_dict 变量数据转换
                if keys[vl] in xls_dict.keys(): # 就是为什么说 错了一个空格都对不上的原因
                    values_dict[self.__switch_code + keys[vl]] = cell_values[rd][vl]
                    values_dict[keys[vl]] = self.data_switch(cell_values[rd][vl], keys[vl])
                else:
                    values_dict[keys[vl]] = cell_values[rd][vl]
            if values_dict != {}:
                cell_values_list.append(values_dict)

        return cell_values_list12345678910111213141516171819202122232425262728293031323334353637

上面代码中, 可以看到 有很多 if 在

IF “REF{” IN STR(CELL_VALUES[RD][VL]):

ref{}是用来引用本文件中,其他sheet 的中的数据:被应用的sheet 要有一列 第一行是 sheet 的页面

	"""
            ref{sheet}   			此 sheet 的全部数据
            ref{sheet#1} 			此 sheet 的序号 = 1 的
            ref{sheet#1,2,3,4}		此 sheet 的序号 = 1,2,3,4 的
            ref{sheet#1_4}			此 sheet 的序号 = 1到4 的
            ref{sheet#1_4,6}		此 sheet 的序号 = 1到4 和 6 的
            ref{sheet#1_4,6_7}		此 sheet 的序号 = 1到4 和 6到7 的
            ref{sheet1#1;sheet2#1}	读取多个 sheet 的序号 = 1 的 #号后面其他雷同
        """123456789

被引用的 sheet 页中的内容
在这里插入图片描述

IF “{{” IN STR(CELL_VALUES[RD][VL]) AND “}}” IN STR(CELL_VALUES[RD][VL]):

{{key_name}} 用来引用 sheet “全局变量” 中的数据, 要申明一下, 被读取的文件中要有一个 sheet_name = 全局变量的sheet页 。

在这里插入图片描述

接口测试是测试的一个重要环节,它的分类也是有许多中的,其中有一种是分为了人工测试和自动化测试。今天我们先来了解一下接口自动化测试,接口自动化测试的步骤一般是分为四步的,分别是原理 、业务逻辑、工具以及自动化测试脚本与框架。

image.png


1、原理

所谓原理,指的是接口是什么,依赖于何协议来进行传输,请求和响应是如何发生并完成其效果的。拿http协议来说,你需要学习计算机网络,并且理解你的测试是在网络七层中的第七层。你还需要知道http协议有请求,有响应,以及其中包含了什么。

2、业务逻辑

所谓业务逻辑,指的是你要测试的服务,是怎样利用上述协议能力,达成自己需要的业务逻辑的。此处大概率你需要研发给出一个清楚的接口文档。例如,登录后的session,可以用login请求(body中带用户名密码),响应返回session token(利用响应头的set cookie)实现。例如,当接口返回不正常时,它可以使用响应状态码非200来表达,也可以是响应体json中的code字段。这样,你不仅理解了该如何进行一次接口请求,也知道怎么样的接口响应是预期值(从而得知什么样的情况是bug)

3、工具

3.1、请求发送和收取工具。

3.2、抓包工具,这主要是进行辅助验证。正所谓,“遇事不决先抓包”,黄金定律,切莫瞎猜,眼见为实。

4、自动化测试脚本与框架

最后就需要选择编写的语言和框架了。

5、其他

5.1、让研发提供的接口文档标准化。例如使用swagger和thrift。这样你可以自动生成部分测试代码。

5.2、自动化环境准备,数据准备。

5.3、自动化持续集成,即代码合入,环境部署,测试,打包发布这一整条流水线。

5.4、优化测试框架。

通过上文的一些相关内容,大家应该知道了进行接口自动化测试的话,是需要使用一些工具的。而可以实现接口自动化测试的工具是比较多的,我们要怎么选择一个不错的工具?今天小编给大家推荐一个工具,这就是ATF自动化测试框架软件,它可以无缝集成界面自动化工具Selenium、AR、QTP;集成接口测试工具eolink。



版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:广告文案:才三个月,名媛下午茶的主题就跑偏了!
下一篇:文案君:杰士邦把玻尿酸用在套套上了,真行!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~