美文网首页
用Python的Requests库做接口测试

用Python的Requests库做接口测试

作者: super_小黄 | 来源:发表于2018-03-14 15:17 被阅读0次

    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>

    相关文章

      网友评论

          本文标题:用Python的Requests库做接口测试

          本文链接:https://www.haomeiwen.com/subject/qlsfqftx.html