目录:导读
- 前言
- 一、Python编程入门到精通
- 二、接口自动化项目实战
- 三、Web自动化项目实战
- 四、App自动化项目实战
- 五、一线大厂简历
- 六、测试开发DevOps体系
- 七、常用自动化测试工具
- 八、JMeter性能测试
- 九、总结(尾部小惊喜)
前言
在做自动化测试时,经常会遇到一个需求,希望在全局用例中,仅登录一次,后续所有的用例自动带上请求头部token 或者cookies。
可以自定义fixture 更新内置的 requests_session, 在请求头部添加token 来实现全局登录。
1、全局 token 实现
在项目下 conftest.py 文件中实现先登录,更新请求头部 token
import pytest
from pytest_yaml_yoyo.http_session import HttpSession
import jsonpath
"""
全局仅登录一次,获取token,
在请求头部添加 Authorization: bearer **token** 认证也有这种格式 Authorization: Token **token**
内置fixture requests_session
"""@pytest.fixture(scope="session", autouse=True)
def login_first(requests_session: HttpSession) -> None:"""全局仅一次登录, 更新session请求头部"""# 调用登录方法,获得tokenurl = "http://127.0.0.1:8200/api/v1/login"body = {"username": "test1","password": "123456"}r = requests_session.post(url, json=body)token = jsonpath.jsonpath(r.json(), '$..token')[0]print(f'账号 test1 登录获取到token: {token}')headers = {"Authorization": f"Token {token}"}requests_session.headers.update(headers)
cases/test_info.yml 中用例内容
test_user_info:name: 用户信息request:url: /api/v1/userinfomethod: GETvalidate:- eq: [$.code, 0]- eq: [$.msg, success!]
用例中只写了相对路径,还需要在pytest.ini 配置 base_url 环境地址
[pytest]log_cli = true
log_cli_level = info
base_url = http://127.0.0.1:8200
执行pytest命令运行用例,会看到请求头部自动带上token了
2023-06-08 11:12:02 [INFO]: 运行用例-> test_user_info
2023-06-08 11:12:02 [INFO]: -------- request info ----------
2023-06-08 11:12:02 [INFO]: yml raw -->: {'url': '/api/v1/userinfo', 'method': 'GET'}
2023-06-08 11:12:02 [INFO]: method -->: GET
2023-06-08 11:12:02 [INFO]: url -->: /api/v1/userinfo
2023-06-08 11:12:02 [INFO]: headers -->: {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', '
Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Token 8846dbad632813f097c577d0ff6aafc4547090f9'}
这样就可以实现全局仅登录一次,后续用例全部自动带上登录的请求头部’Authorization’: ‘Token …’.
上面这种方式虽然实现了全局token ,但是登录的token地址是写死的,如果有多套环境需要切换,并且不同环境登录的账号不一样,就需要根据环境的切换来自动读取环境配置了。
2、多套环境配置
在项目下 config.py 中配置不同环境
class Config:"""每个环境都有一样的公共配置"""version = "v1.0"appId = 10086class TestConfig(Config):"""测试环境"""BASE_URL = 'http://127.0.0.1:8200'USERNAME = 'test1'PASSWORD = '123456'BLOG_URL = 'https://www.cnblogs.com'class UatConfig(Config):"""联调环境"""BASE_URL = 'http://192.168.1.12:8201'USERNAME = 'test8'PASSWORD = '123456'# 环境关系映射,方便切换多环境配置
env = {"test": TestConfig,"uat": UatConfig
}
还需要在 pytest.ini 配置环境名称,这样 pytest.ini 中的 base_url 就不用配置了,可以全部写到 config.py 中的配置里用大写的 BASE_URL
[pytest]log_cli = true
log_cli_level = infoenv = test
在项目下 conftest.py 文件中实现先登录,修改后如下
import pytest
from pytest_yaml_yoyo.http_session import HttpSession
import jsonpath
"""
全局仅登录一次,获取token,
在请求头部添加 Authorization: bearer **token** 认证也有这种格式 Authorization: Token **token**
内置fixture requests_session
"""@pytest.fixture(scope="session", autouse=True)
def login_first(requests_session: HttpSession, environ) -> None:"""全局仅一次登录, 更新session请求头部"""# 调用登录方法,获得tokenurl = environ.BASE_URL + "/api/v1/login"print(url)body = {"username": environ.USERNAME,"password": environ.PASSWORD}r = requests_session.post(url, json=body)token = jsonpath.jsonpath(r.json(), '$..token')[0]print(f'账号 {environ.USERNAME} 登录获取到token: {token}')headers = {"Authorization": f"Token {token}"}requests_session.headers.update(headers)
切换环境运行有2种方式
方式1:修改pytest.ini 中的 env值
[pytest]env = uat
方式2:通过命令行切换环境
pytest --env=uat
这样就可以根据环境的切换自动获取环境的配置生成对应环境的token了。
还有一种简便方法,只要在环境配置中添加了 BASE_URL 属性,可以用 requests_session.send_request() 请求相对路径
import pytest
from pytest_yaml_yoyo.http_session import HttpSession
import jsonpath
"""
全局仅登录一次,获取token,
在请求头部添加 Authorization: bearer **token** 认证也有这种格式 Authorization: Token **token**
内置fixture requests_session
"""@pytest.fixture(scope="session", autouse=True)
def login_first(requests_session: HttpSession, environ) -> None:"""全局仅一次登录, 更新session请求头部"""# 调用登录方法,获得tokenurl = "/api/v1/login"body = {"username": environ.USERNAME,"password": environ.PASSWORD}r = requests_session.send_request('post', url, json=body)token = jsonpath.jsonpath(r.json(), '$..token')[0]print(f'账号 {environ.USERNAME} 登录获取到token: {token}')headers = {"Authorization": f"Token {token}"}requests_session.headers.update(headers)
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图 |
一、Python编程入门到精通
二、接口自动化项目实战
三、Web自动化项目实战
四、App自动化项目实战
五、一线大厂简历
六、测试开发DevOps体系
七、常用自动化测试工具
八、JMeter性能测试
九、总结(尾部小惊喜)
只有奋斗,才能拥抱辉煌;只有努力,才能追寻梦想;只有坚持,才能战胜困难;只有积极,才能创造奇迹;只有勇敢,才能改变人生。不言放弃,向着成功勇往直前!
只有经历过风雨,才能见彩虹;只有经历过挫折,才能看到成功;只有付出奋斗,才能收获成就。坚持不懈地追逐梦想,终将在人生的舞台上绽放光芒。
只有坚持不懈的奋斗,才能点亮心中的希望之光,驱散迷茫与困惑,最终成就辉煌人生。无论前路多么艰辛,勇往直前,信念与努力将引领你走向成功的彼岸。