第一种策略:
登录的token,可以从单独写个用例,登录里面包含了所有需要用到的接口的token,然后其他用例调用登录,然后利用脚本间传参,传入token即可解决,但是,要符合以下内容顺序:
1、测试前置:调用其他用例准备测试数据,用例1,用例2,用例3,因为用例间都保证的单独运行不报错,所以不用担心用例间的各种关联问题。
2、调用登录用例
3、调用你要验证的接口。
第二种策略:
在debug中写入token,因为httprunenr是基于requests.session去执行的,所以后续用例不再需要调用登录,只需要传入所需要的token即可。
debug_talk.py优化下登录:
import pytest
import requests
from bs4 import BeautifulSoup
@pytest.fixture(autouse=True)
def get_token(index):
s = requests.Session()
r1 = ss.get(url = "xxx", verify=False)
execution = BeautifulSoup(res.text, "lxml").find(attrs={
"name":"execution"})["value"]
r2 = s.post(url='http://xxx', data=f'admin: "$admin", passwd:"$passwd", excute:{
execution}')
r3 = s.post(url="http://xxx", data="xxx")
r4 = s.post(url="http://xxx", data="xxx")
token_cosmosgis = r2.text
token_fusgis = r3.text
token_genex = r4.text
token = (token_cosmosgis, token_fusgis, token_genex)
return token[index]
if __name__ == '__main__':
get_token()
0607优化的最终结果,避免了调用登录用例:
import requests
from bs4 import BeautifulSoup
from pathlib import Path
def get_token(index):
# 从.env获取值
file = Path("./.env").open()
host = [i for i in file][-1].split("=")[1]
name = [i for i in file][1].split("=")[1].strip()
password = [i for i in file][1].split("=")[2].strip()
# 以临时会话session的形式登录
s = requests.session()
data = {
"username": admin,
"password": password,
"excution": BeautifulSoup(s.get().text, "lxml").find(attrs={
"name":"excution"})["value"],
"_evxxx": "xxx",
"submit": "登录",
}
s.post(url=f"{
host}/cas/login", data=data, verify=False)
# 登录后开始获取各种token
fxxxgis = s.get(f"{
host}/fxxxgis/csrftoken.do").json().get("_csrf")
cxxxgis = s.get(f"{
host}/cxxxgis/csrftoken.do").json().get("_csrf")
li = [fxxxgis, cxxxgis]
return li[index]
if "__name__" == "__main__":
a = get_token(0)
print(a)