首页 > 技术文章 > python2.7接口自动化整理

testling 2019-10-04 19:52 原文

当我们在测试知识海洋玩的正嗨时,收到一个需求,被告知这个需求在何时何时上,心中肯定万马奔腾!

 

不过作为测试,我们要保证需求质量同时,也需要提升自己测试技能,从而高效完成测试工作。

废话不多说~

 

一,接口自动化:

 

(1)对收到一个接口文档,我们肯定需要对这个接口进行接口测试,我们可以先写一个请求函数出来,然后在用例里面进行调用这个函数。

 

get请求:

那么这种请求方式就是参数放在链接里面,在fidder中就是webfroms 里面可以看到参数

例子:

获取验证码接口:

def users_sendOtp(params={}):
"""
发送验证码
请求方式:get
:return:
"""
url=HOST+'/users/sendOtp'
result=requests.get(url=url,params=params,proxies=proxies,verify=False)
return result

注:
proxies和verify=False可以不带上


下面为调用这个函数的测试用例:

def test_send_otp_13(self):
    """
发送验证码,params方式传参,传入全部必填参数
:return:
"""
result=users_sendOtp(params={
# 'userLoginType': '9421511119',
'userLoginType':time.strftime('zhumandi@%Y%m%d%H%M%S.com',time.localtime()),
'type': 'lend',
'userExistCheck': 'true'

})
# print result
self.assertEqual(result.status_code, 200, "fail".format(result.status_code))


post请求类似:
不过post请求涉及到传参数不同的问题,我们先写一个更新body的函数

def test_user_addAppConfig(kitc={}):
"""
给app添加详细信息接口
请求方式:post
:return:
"""
url=HOST+'/users/addAppConfig'
body={
"androidId": "string",
"appVersion": "string",
"deviceDetails": "string",
"deviceToken": "string"
}
args = update_args(body, kitc)
ret=requests.post(url=url,proxies=proxies,json=args,verify=False)
return ret

这里面
update_args 就是一个更新body的函数 具体如下:
def update_args(dict_args=None, new_dict=None, **kwargs):
if kwargs:
dict_args.update(kwargs)
if new_dict:
dict_args.update(new_dict)
return dict_args

实际用例当中就是调用这个函数,进行传参就行
result=test_user_addAppConfig({

})


(2)以上讲的是我们如何进行写接口自动化用例,当然会存在 出现问题时,我们要去找参数,不简单明了。我们可以把发起请求这个动作封装一下。

# -*- coding: utf-8 -*-
import requests

proxies = {'http': 'http://localhost:8888', 'https': 'http://localhost:8888'}

headers = {
"Content-Type": "application/json"
}
def httprequest(url, method, data): # 参数url,method,data
global res
try:
if method.upper() == 'POST': # 根据拿到的method去判断选择哪种请求方式。

res = requests.post(url=url,headers=headers,data=data,verify=False,proxies=proxies).json()

elif method.upper() == 'GET':
res = requests.get(url, headers=headers,params=data,verify=False,proxies=proxies).text

except Exception as e:
msg = '【%s】接口调用失败,%s' % (url, e)
res = msg
return res # 返回请求返回的内容


这个函数就是把发起请求这个动作封装成一个函数,下面看具体的调用方式:


def test_users_logout1():
"""
退出登录
:return:
"""
#发起HTTP请求
re=httprequest(url=HOST+'/users/logout',method='GET',params={'AUTH_TOKEN':'fbkejsfvka3476t9320975834rbeow5yt239rh3'})

是不是简洁很多. 我们只需要传url 请求方式(post或者get) 然后有需要params传参就是传 不需要就params={}
还有就是当你的data请求参数中存在中文,2.7读取的时候会出现报错,可以加上那个ending="utf-8"
json字符串字典转换 就是读取到的是字符串 可以利用json.loads 来转换为字典 读取到的是字典 ,可以利用json.dumps来转换成字符串
z


(3)我们发现第二种方式,写参数很麻烦,我们可以这么弄,先搞个excel表格,把请求方式 method url params、或者存在的body 写到一个表格中

 

 

 

具体这样,当然 里面字段不用介意。下面看具体的测试用例举例:

def test_addAppConfig_1(self):
"""
给app添加详细信息,传入全部参数,添加成功
请求方式:post
:return:
"""
  
  file=r'E:\Apitest\test.xls'

book = xlrd.open_workbook(file) # 打开excel文件
sheet = book.sheet_by_index(0) # 通过索引打开第一个表
nrows = sheet.nrows # 获取所有行数

nrow_value = sheet.row_values(1)#获取表格中的值 具体是第几行
  


  那么url 就是(1,1)method为(1,3)以此类推
ret=httprequest(url=nrow_value[1],method=nrow_value[3],params=nrow_value[2],data=nrow_value[4])
print ret

这种方式是第二种方式的延伸。我们写测试用例时,只需要复制粘贴,前提我们把这个表格整理好就行。
nrow_value = sheet.row_values(number)#只需要修改这个number


喜欢python就好好学吧,哈哈哈哈~ 我也在学,有歧义大佬勿喷,只是想深入一下自己理解!




 

 

 

 

 

 







 

推荐阅读