模拟登录成功
场景描述:在登录测试中,无需真的调用服务器API,而是直接模拟服务器成功响应,返回一个假的JWT token。
def login_success_mock(route):
if "/login" in route.request().url and route.request().method == 'POST':
route.fulfill(
status=200,
headers={"Content-Type": "application/json"},
body=json.dumps({"token": "mocked_token"})
)
else:
route.continue_()
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
context = browser.new_page()
context.route("**/api/login*", login_success_mock)
# 登录操作...
# ...
动态模拟API响应
场景描述:根据请求参数动态生成不同的响应数据,模拟多场景下的API交互。
def dynamic_response(route):
params = parse_qs(urlparse(route.request().url).query)
if params.get('type') == ['success']:
route.fulfill(status=200, body=json.dumps({"status": "success", "data": "mocked_data"}))
else:
route.fulfill(status=400, body=json.dumps({"status": "error", "message": "Invalid request"}))
context.route("**/api/dynamic*", dynamic_response)
模拟网络延迟
场景描述:为了测试应用在慢网络下的表现,模拟网络延迟。
import time
def latency(route):
time.sleep(3) # 模拟3秒延迟
route.fulfill(status=200, body='{"response": "delayed"}')
context.route("**/api/slow*", latency)
模拟分页数据
场景描述:在分页加载测试中,模拟不同页码的数据返回。
def paginated_response(route):
page_number = int(route.request().url.split('/')[-1])
mock_data = [{"id": i} for i in range(page_number*10, page_number*10 + 10)]
route.fulfill(status=200, body=json.dumps({"page": page_number, "items": mock_data}))
context.route("**/api/items/page/*", paginated_response)
模拟HTTP错误
场景描述:测试应用在遇到500 Internal Server Error等HTTP错误时的处理能力。
def http_error(route):
route.fulfill(status=500, body='{"message": "Internal Server Error"}')
context.route("**/api/error*", http_error)
模拟重定向
场景描述:模拟从一个URL重定向至另一个URL的过程。
def redirect(route):
route.fulfill(status=302, headers={"Location": "http://example.com/mock-redirect-target"})
context.route("**/api/redirect*", redirect)
模拟授权失败
场景描述:模拟鉴权失败,返回401 Unauthorized响应。
def auth_failure(route):
route.fulfill(status=401, body=json.dumps({"message": "Unauthorized"}))
context.route("**/api/auth*", auth_failure)
模拟特定HTTP头部
场景描述:在响应中添加或修改特定的HTTP头部。
def custom_headers(route):
route.fulfill(status=200, headers={"X-Mock-Header": "mocked_value"}, body='{}')
context.route("**/api/headers*", custom_headers)
模拟资源未找到
场景描述:模拟404 Not Found错误。
def not_found(route):
route.fulfill(status=404, body='{"message": "Resource not found"}')
context.route("**/api/nonexistent*", not_found)
根据请求体内容决定模拟响应
场景描述:根据POST请求体中的内容动态决定模拟的响应。
def conditionally_mocked_response(route):
request_body = json.loads((await route.request().post_data_buffer()).decode())
if request_body["key"] == "mock":
route.fulfill(status=200, body=json.dumps({"mocked": True}))
else:
route.continue_()
context.route("**/api/conditional*", conditionally_mocked_response)
行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 759968159,里面有各种测试开发资料和技术可以一起交流哦。
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。