框架的设计思路首先要明确接口自动化需要的步骤,如下图:然后逐步拆解需要做的工作完成:1)理解分析需求:理解接口要实现的功能2)数据准备:根据开发文档确定接口的基本情况,知道接口的url、请求方法、入参等信息接口,然后根据业务逻辑和输入参数预测接口的输出。需要一个配置文件来存放接口的一些基本信息;需要有一种方法来读取配置文件;需要有excel或者yaml格式的文件来存放测试数据;需要有一种方法来读取测试数据;需要有一种方法来读取配置文件和测试数据,组装成测试执行所需的参数化数据;如果需要根据参考数据库得到预期的结果,还需要一个可以执行sql的方法。3)Design&ExecuteTest:生成一个测试文件,可以根据传入的参数调用接口得到接口输出然后验证,根据pytest的特点,可以把准备参数化数据的工作放到conftest下。py;调用接口和断言验证需要有测试文件,命名规则为xxx_test。py或test_xxx.py;为了更好的验证输出和预期的输出,准备封装系统自带的断言;为了更好的执行测试,封装requests模块,制定统一的输入输出标准;记录执行错误信息并导入日志Record模块;4)检查结果:根据断言结果判断接口是否满足要求。框架最终的执行顺序如下图所示。然后介绍框架的基本结构。该文件对应一个接口需要的测试数据。命名规则为nameA.xlsx或nameA.yaml(nameA为待测接口名称)。文件可以存储参数名、参数值、需要的cookie、期望的输出结果2.assertion.py--封装的断言方法,用于验证接口返回值是否与期望结果一致config.py--encapsulate读取配置文件的方法get_caseparams.py--将测试数据处理成需要的接口log.py的格式--封装的日志记录方法request.py--封装的HTTPS请求方法,主要是post和getselectDB.py--查询sql并将结果处理成[dic1,dic2,dic3...]这种格式,每个dic就是一个数据testcastemplate。py--这是一个脚本,根据caseparams文件夹中的测试数据自动生成testcase文件夹下的测试文件。3.里面存放了两个配置文件,base.ini存放了数据库连接的配置。所有测试接口都需要interface.ini配置4.记录测试日志文件。没什么可说的。log.log为当天的文件,其他为对应日期下的历史日志。5.将一个固定名称为conftest.py的文件放在与被测接口脚本相同的文件夹中。这里的作用是为每个被测试的脚本提供参数化支持。test_XXX.py文件是接口的测试文件。XXX是被测接口的名称。6.run.py---测试执行的主要入口点。如果把接口自动化测试框架放在jenkins上进行持续集成,可以通过配置jenkins来替换这个入口点。使用说明当我们需要有一个接口(假设名字是abc),需要使用这个框架进行自动化测试时,操作步骤如下:1.在interface.ini文件下添加一个名为abc的节点,然后配置该节点下的接口参数文件格式、http请求方式、接口url、接口wiki。2、在casefparams文件夹下创建一个用例数据文件,名称为abc.xlsx。3.执行common文件夹下的testcastemplate.py。执行结果是会根据前两步配置的内容,在casefile文件夹下自动生成脚本文件test_abc.py。4.编辑test_abc.py添加所需的断言来验证接口的准确性。5.执行run.py完成测试。测试执行细节在run.py中指定要测试的测试文件在testcase目录下的路径。根据pytest的运行机制,会先调用testcase目录下的conftest.py。这里这个文件的作用是遍历testcase目录。test_开头的测试文件,然后调用get_caseparams.py读取配置文件config.py,读取并组装参数,参数化测试用例数据传递给test_开头的测试文件,执行test文件开头test_完成后会拆分前面步骤传过来的参数,然后调用request.py发送http请求获取接口的json格式的返回结果,然后是接口的返回结果将通过以下方式进行验证。1)根据产品业务逻辑,在输入参数已知的情况下很容易得到预期结果时,可以直接将预期结果连同输入参数放入excel或yaml测试数据文件中。在执行测试的时候,这些参数也会被传递到测试文件中,取出来用接口输出验证即可。2)在查数据库校验的情况下,需要将作为接口入参条件的sql写成sql,调用selectDB.py得到查询结果,然后用sql返回的结果和用于验证的接口输出。3)还有一些复杂的场景可以根据接口输入参数,根据业务逻辑编写脚本得到预期的结果,再与接口输出进行验证。
