代码实现接口自动化的步骤

  • 代码实现接口自动化步骤
    搭建环境(python+pycharm+requests库)------新建项目APITest----搭建框架目录结构—代码实现
    目录结构如下:
    api_keyword:提取常用函数
    api_case:编写测试用例
    data:存放测试需要的数据
    config:存放配置文件
    report:存放生成的测试报告
    tools:存放需要放的第三方插件
    log:存放日志文件
    run_suit.py:执行测试入口
    在这里插入图片描述

  • 代码实现如下:

#-*-coding:utf8 -*-
'''
    定义接口自动化测试的关键字类
'''
import json
import requests
import jsonpath

class Keyword:
    #定义get请求方法
    def get(self,url,param=None,header=None):
        return requests.get(url=url,headers=header,params=param)
    #定义post请求方法
    def post(self,url,data=None,header=None):
        return requests.post(url=url,headers=header,data=data)
    #校验字段获取方法
    def get_text(self,res,key):
        if res is not None:
            try:
                #将res文本转换成json格式,通过jsonpath解析获取到指定的key的value值
                text=json.loads(res)
                value=jsonpath.jsonpath(text,'$..{0}'.format(key))
                #jsonpath获取的结果是list类型的值,如果获取失败则是false
                if value:
                    #将list转换成string格式
                    if len(value)==1:
                        return value[0]
                    else:
                        return value
                else:
                    return value
            except Exception as e:
                return e
        else:
            return None
    #请求参数转换为Json格式
    def json_dumps(self,data):
        return json.dumps(data)

#-*-coding:utf8 -*-
import unittest
from ddt import ddt,file_data
from api_keyword.Keyword_base import Keyword
from config.readFile import readFile
'''
    创建一个UnitTest测试用例管理框架
'''
@ddt
class ApiCase(unittest.TestCase):
    #公共部分提取,作为初始化内容
    @classmethod
    def setUpClass(cls) -> None:
        cls.access_token = None
        # 实例化需要的内容
        cls.kd = Keyword()
        cls.url_config = readFile('../config/Config.ini').get_readConfig("url")
    # 测试用例
    @file_data('../data/login.yaml')
    def test_1_api_login(self,**kwargs):
        #实例化需要的内容
        url = self.url_config + kwargs['path']
        #接口测试
        res=self.kd.post(url=url,data=kwargs['data'],header=kwargs['headers'])
        #获取登录的token并给access_token赋值
        ApiCase.access_token=self.kd.get_text(res.text,'access_token')

        #获取需要断言的值
        value_success=self.kd.get_text(res.text,'nickname')
        value_faile=self.kd.get_text(res.text,'resultMsg')
        #断言校验
        if "nickname" in res.json()['data'] :
            self.assertEqual(first=kwargs['text'],second=value_success,msg='登录成功')
        else:
            self.assertEqual(first=kwargs['text'],second=value_faile,msg='登录失败')
    @file_data('../data/logout.yaml')
    def test_2_api_logout(self,**kwargs):
        url=self.url_config+kwargs['path']
        #把access_token的值赋值给headers
        headers=kwargs['headers']
        headers['access_token']=self.access_token
        #接口测试
        res=self.kd.post(url=url,data=kwargs['data'],header=kwargs['headers'])
        value=self.kd.get_text(res.text,'success')
        faile_value=self.kd.get_text(res.text,"error")
        #断言校验,如果success返回true,则退出成功
        if self.kd.get_text(res.text,"success"):
            self.assertEqual(first=kwargs['text'],second=value,msg='退出成功')
        else:
            self.assertEqual(first=kwargs['text'],second=faile_value,msg="accid未传")
    @file_data('../data/touristLogin.yaml')
    def test_3_api_tourists(self,**k):
        url=self.url_config+k['path']
        res=self.kd.post(url=url,data=k['data'],header=k['headers'])
        value=self.kd.get_text(res.text,'nickname')
        #断言nickname的用户是user -0288
        self.assertEqual(first=k['text'],second=value,msg='游客token是固定的')
    @file_data('../data/changePassword.yaml')
    def test_4_api_changePwd(self,**kwargs):
        url=self.url_config+kwargs['path']
        res=self.kd.post(url=url,data=kwargs['data'],header=kwargs['headers'])
        value=self.kd.get_text(res.text,'resultMsg')
        self.assertEqual(first=kwargs['text'],second=value,msg='验证码错误')


if __name__ == '__main__':
    unittest.main()

-yaml样式
在这里插入图片描述
–运行结果
在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值