python之路

python简单接口测试框架

2021-01-09  本文已影响0人  非鱼2018

python接口测试使用requests库,实际使用当中,其实套路都是类似的,比如,前置的登录,再访问某个接口获得权限
而且同一个项目中,header的content-type基本都是相同的,比如都是json,请求数据类型也基本类似,常用的无非也就是post请求,和get请求,因此可以将最基本的登录,以及最基本的发送请求封装成基础类,
编写业务接口用例时,只需要使用组合类,传递不同的数据以及解析返回内容即可
框架代码

# coding=utf-8
# 接口测试框架
import requests
from requests.exceptions import RequestException  
import json
import sys

class InerfaceLoginError(Exception):pass  #自定义异常
class Login:  #登录
    login_url = 'http://mytest.login.com'           #定义登录的url以及用户密码等
    login_data = {"username": "feiyu1009",
                  "password": 123456,
                  "verify": True
                  }
    session = requests.Session()   #使用session会话维持
    access_url = "http://mytest.route"

    def __init__(self, username='feiyu1009', password=123456):  #默认用户,如果不同用户,实例化login时可传递不同用户密码
        self.username = username
        self.password = password

    def login(self):
        Login.login_data.update(username=self.username, password=self.password) 
        response = Login.session.post(Login.login_url, Login.login_data)
        if response.status_code == 200:
            print("登录成功")
        else:
            print("登录失败")
            raise InerfaceLoginError()


    def get_access(self):  #访问接口获取对应权限
        Login.session.get(self.access_url)

    def get_session(self):  
        self.login()
        self.get_access()
        return Login.session  #返回登录后的session

class SendRequest:
    headers = {"Content-Type": "application/json;charset=utf-8"}

    def __init__(self, session, url, data=None,request_type='GET'):
        self.session = session
        self.url = url
        self.data = data
        self.request_type=request_type

    def send_get(self):
        try:
            response = self.session.get(self.url, self.data)
            if response.status_code == 200:
                return response.json()
            return None
        except RequestException:
            return None

    def send_post(self):
        try:
            response = self.session.post(self.url, json.dumps(self.data), SendRequest.headers)
            if response.status_code == 200:
                return response.json()
            return None
        except RequestException:
            return None

    def __call__(self):  #定义call方法,实现只要传递request_type,内部判断使用send_get还是send_post
        if self.request_type.upper()='POST':
            self.send_post()
        elsif self.request_type.upper()='GET':
            self.send_get()

业务用例代码,只需要编写业务接口用例即可


class QueryData:
    query_url = ""
    post_data = """  {"name": "aaa", "status": true, "type": null}"""

    def __init__(self):
        self.login = Login().get_session()

    def query_data(self, query_name):
        json_data = json.loads(QueryData.post_data)
        json_data.update(name=query_name)
        sr = SendRequest(self.login, QueryData.query_url, json_data,'post')
        #response = sr.send_post()
        response =sr()
        return response
        #省略实际的返回结果校验


if __name__ == '__main__':
    qa = QueryData()
    qa.query_data('feiyu1009')
上一篇下一篇

猜你喜欢

热点阅读