用Python的Requests库做接口测试

2018-03-14  本文已影响0人  super_小黄

HTTP接口测试(基于Python Request)

一、POST方法:

(1)首先定义访问的url

 url = host + "/xxx/interfaceName.json"

(2)传参


引用:(http://blog.csdn.net/mm_gg_201512/article/details/72830000)

application/x-www-form-urlencoded方式是Jquery的Ajax请求默认方式,这种方式的好处就是浏览器都支持,在请求发送过程中会对数据进行序列化处理,以键值对形式?key1=value1&key2=value2的方式发送到服务器,如果用Jquery,它内部已经进行了处理,如果自己写原生的Ajax请求,就需要自己对数据进行序列化。 

application/json,随着json规范的越来越流行,并且浏览器支持程度原来越好,许多开发人员易application/json作为请求content-type,告诉服务器请求的主题内容是json格式的字符串,服务器端会对json字符串进行解析,这种方式的好处就是前端人员不需要关心数据结构的复杂度,只要是标准的json格式就能提交成功,application/json数据格式越来越得到开发人员的青睐。


如果是json方式传参:

header = {

    'Content-Type':'application/json;charset=UTF-8'

}

payload = {

    'paramName1': value1, 

    'paramName2': value2

}

ret = requests.post(url, data = json.dumps(payload), headers=header)

如果是x-www-form-urlencoded方式

header = {

    'content-type': 'application/x-www-form-urlencoded'

}

payload = "paramName1=value1&paramName2=value2"

ret = requests.post(url, data = json.dumps(payload), headers=header)

二、Get方法:

(1)一样,首先定义访问的url

 url = host + "/xxx/interfaceName.json"

(2)传参

params = {'paramName1':value1, 'paramName2':value2}

ret = requests.get(url, params=params)

三、设置cookie

有些系统的接口会需要在账号登录的情况下才能被调用,有些则不需要。如果遇到需要的,一个方法是通过获取已登录系统的cookie信息,通过request.get方法传入cookie信息,模拟已登录的状态。

myCookies = {'JSESSIONID':5a89c63e-6b25-4ca3-9082-a03xxxxxxxx}

ret = requests.xxx(url, ...,  cookies=myCookies)      //xxx表示get或post

多说一句,因为cookie会有有效期,如果失效了,就需要重新配置cookie。因此,我是在测试脚本运行刚开始,先调用某cookie对应的一个接口,如果返回异常,就停止测试脚本,给出提示让操作者重新配置cookie值。

四、获取返回值

ret = requests.xxx(url, ...)

对返回值,一般会用到返回码,以及返回数据

目前大多情况下,返回数据都是json格式的。对request.xxx返回的ret先转化为dict

ret_dict = dict(json.loads(ret.text,encoding='utf-8'))

然后再从dict中取code或者data

ret_code = ret_dict['code']

value = ret_dict['data']['paramName1']

对于返回码,多说两句。开发习惯不同,有些开发把返回200写成整型,有的写成字符型,

测试时,有的返回200,条件是ret_code=='200'成立,有的是 ret_code==200,

因此,不妨就统一写成:

if not(ret_code=='200' or ret_code==200):

    print('[ERROR]:.........')

五、测试数据分离

测试脚本很常有的一个思想就是测试数据分离,就是将测试数据用txt/excel/csv格式进行存储,而不是放在代码中。

我用的是csv格式来存储,搭配Python中的csv库,来操作csv文件的读写。

读配置:

def getConfig(file, index):

    file1 = open( file, 'rt')

    reader = csv.reader(file1)

    column = [row[index] for row in reader]

    return column[0]

写配置:(我是把配置都写到csv第一行,第二行存各列的标题,第三行及以后存不同场景下的配置,根据需要把对应场景的配置写到csv的第一行,然后读取出来使用)

def write(type):

    file2 = open( csv_file2, 'rt')

    tempFile = open( temp_file, 'a+')

    reader = csv.reader(file2)

    writer = csv.writer(tempFile)

    rows = [row for row in reader]

    newData = rows[type]

    i=0

    for row in rows:

        if i==0:

    writer.writerow(newData)

六、Python调用jmeter

jmeter也可以拿来做接口测试,如果有需要混用的情况,下面介绍一下怎么调用jmeter。(什么时候会混用?比如别人用jmeter写的,我用python写的另外的,想结合起来一起用)

用到了Python的subprocess库

jmeter_bin="........."

jmx_folder = ".........."

exportCmd = "%s/jmeter -n -t %s -l %s" %(jmeter_bin,filefolder+"/xxxxxxx.jmx", jmx_folder+"/report.csv")

process = subprocess.Popen(exportCmd, shell=True)

(stdoutdata, stderrdata) = process.communicate()

在命令行下调用,命令是:

jmeter -n -t <testplan filename> -l <listener filename>

上一篇下一篇

猜你喜欢

热点阅读