httprunner_接口框架问题汇总

欢迎进行接口(httprunner)、UI自动化(pytest)交流,博主微信:jiaotengfei1016


常用接口工具对比:

postman:不适合自动化,强行做也可以搞,不是最优解
jmeter:用例管理是针对性能设计的,管理case不方便,jmeter+junit完善后可以解决,不推荐
requests:推荐
httprunner:基于requests封装的国内做的比较好的接口框架。推荐

httprunner_问题1:yml转pytset用例?

解决:hmake xx.yml

httprunner_问题2:如何解决多模块的函数封装?

原理:httprunner运行用例,会对用例里面所调用的函数进行正则匹配,然后加载debugtalk.py中对应的函数。所以,只要保证函数能入dbugtalk.py即可。

(1)新建libs目录;
(2)不同的模块需要封装的函数,放在不同的文件中;
(3)在debugtalk.py中导入该模块。
在这里插入图片描述

httprunner_问题3:解决了登录后产生的十几个接口的问题?

背景:登录后各种重定向,最终产生了16个接口,将特性界面的接口cookie、token进行分析后,发现从登录用例里面传递出了3个cookies参数,加上token是4个,开启分析登录接口模式,接口间各种传参、重定向,传的我欲仙欲死,最终搞定。这几天在技术群听到说httprunner是登录后,后面的接口步骤都是基于登录产生的临时session,这样的话岂不是解决了我这十几个接口的问题,省去了每次调用接口都要跑十几个接口,跑完200多个用例,日志文件20M,我凑!
解决:
(1)直接写了登录的post接口,不进行跨脚本传参,其中的某参数是登录的get接口从返回的html文件中动态获取的,
(2)用例里面,调用登录接口,
(3)调用获取token的接口(刚进入界面的时候会出发这个接口)
(4)调用你要测的接口,其中.header()里面只需要传入token这个变量即可,cookies是自动继承上面登录的临时会话session中的cookies,

httprunner_问题4:如何在debugtalk.py中提取.env文件里面的值?

场景1:用pathlib模块提取.env文件中某个变量的值

from pathlib import Path
# 读取.env文件的最后一行的 =号后面的 值
hostname = [i for i in Path('./config.ini').open()][-1].split("=")[1]
print(hostname)

场景2:httprunner提取.env文件中某个变量的值
若还需对读取的环境变量做进一步处理,则可以在 debugtalk.py 通过 Python 内置的函数 os.environ 对环境变量进行引用,然后再实现处理逻辑。

import os
def get_user_name():
	return os.environ["UserName"]

import os
def get_user_name(index):
	return os.environ[f"{
      
      index}"]

httprunner_问题5:大量的异常场景,如何进行参数化处理?

在参数化文件中,将校验参数和对应的入参相关联即可。

class TestCaseXxx(HttpRunner):
    @pytest.mark.parametrize("param", Parameters({
    
    
        "phone-password-message": [
        ("123123", "asdfasd", "success"), 
        ("123123", "asdfasd", "failed"), 
        ],}),)
    def test_start(self, param):
        super().test_start(param)

httprunner_问题6:因登录重定向产生的json()报错。

因登录后重定向,产生了太多的接口,在用session处理,获取各种token时,发现返回的数据无法.json()处理,报错:json.decoder.JSONDecodeError:Expecting value: line1 colunm 1 (char())

def get_token(tokenname):
	hostname = [i for i in Path('./config.ini').open()][-1].split("=")[1]
	se = requests.session()
	response_execution = se.get(url=f'{
      
      host}/cas/login', verify=False)
	execution = BeautifulSoup(response_execution.text, "lxml").find(attrs={
    
    "name":"execution"})["value"]
	se.post(url=host+'/cas/login', json={
    
    xxx}, verfity=False)
	fusiongis=se.get(url=f"{
      
      host}/fusiongxxx/csrftoken.do", verify=False).json()
	# 这里报错了:json.decoder.JSONDecodeError:Expecting value: line1 colunm 1 (char()) 
	
	# 这里token在返回的json里,可以直接提取,说明我的返回有问题,并不是提取的问题。
	login_ret = s.post(login_url, headers=header, data=body)
	token = login_ret.json()["token"]	

httprunner_问题7:下载文件的接口报错505?

(1)排查入参,初步判定是入参哪里的问题
(2)通过比较:har2case 转换其他下载文件的脚本,对比后发现是with_data()这里写成了with_json()。

httprunner_问题8:在多边形配置界面点击导出多边形,可在“异步报告导出界面”下载导出的文件,问题是:下载导出的文件返回200,body为空?

(1)返回200,初步判定入参没问题,
(2)body为空,是因为导出接口和下载文件的接口,没有做等待设置,
(3)解决办法:下载文件的接口前添加测试前置:setup_hook(“hook_sleep(5)”)。

httprunner_问题9:跑导出多边形,并在异步报告导出界面下载多边形的性能用例失败?报错:not found testcases

跑接口性能脚本注意事项:
(1)执行命令:locusts -f testcases/xxx/xxxtest.py【必须从testcases目录出发,文件以test结尾】
(2)脚本不能使用parameters做初始的参数化

httprunner_问题10:调测接口经常报错,针对不同响应码,如何排查?

302:接口重定向,意思就是访问了该接口后,没有返回200,直接又去访问当前接口里的refer的参数。这个参数是个新的地址。
400:请求的语法错误 >>> body题哪里错了 >>> 开发悄悄改了参数
404:url错了 >>> 少复制了字母,空格等
409:cookie传递错误 >>> 查询cookie的整个传递过程
505:body哪里错了,1个单词1个单词的排查 >>> 多复制少复制了内容,多写了个{ 等。

httprunner_问题11:如何利用pytest创建测试套(用于升级环境准备测试数据的测试套)?

1、pytest.ini配置文件中,添加标签markers = data
在这里插入图片描述
2、在写好的httprunner用例里面,class前面直接添加

import pytest
@pytest.mark.data()

这里注意:运行的话使用debug不会报错,标记完所需要的用例后
3、suiit.py文件执行,这里会自动执行所有标记为data的测试用例:

pytest.main(["-s", "test_webtest.py", "-m=data"])

httprunner_问题12:新拿到一个项目,接口自动化如何顺利开展工作?

在这里插入图片描述

httprunner_问题13:xx

猜你喜欢

转载自blog.csdn.net/weixin_45451320/article/details/115582812