Python自动化测试面试题及答案(实战版)
一、基础篇(考察核心库与语法应用)
问题:用requests库发送POST请求时,如何分别处理form-data格式和JSON格式的参数?请写代码示例并说明区别。
答案:
核心区别在参数传递方式与请求头Content-Type:
代码示例:
importrequests
#1.form-data格式(含文件上传示例)
form_data={username:test,password:123456}
files={avatar:open(test.jpg,rb)}#可选,无文件可删
res1=requests.post(
url=/login,
data=form_data,
files=files#有文件时必传,无则省略
)
#2.JSON格式
json_data={user_id:123,info:{age:20,gender:male}}
res2=requests.post(
url=/get_user,
json=json_data#直接传字典,无需手动json.dumps
)
form-data(常用于文件上传或表单提交):用data参数传字典,需配合files(如有文件),requests会自动设置Content-Type:multipart/form-data;
JSON格式:用json参数传字典,requests会自动设置Content-Type:application/json并将字典转JSON字符串。
问题:Python自动化脚本中,为什么不推荐用time.sleep()做等待?selenium里更优的等待方式是什么?
答案:
time.sleep(n)是固定等待n秒,会导致两种问题:
更优方式是显性等待(精准控制)+隐性等待(全局兜底):
fromseleniumimportwebdriver
fromselenium.webdriver.support.uiimportWebDriverWait
fromselenium.webdriver.supportimportexpected_conditionsasEC
frommon.byimportBy
driver=webdriver.Chrome()
#隐性等待:全局设置,查找元素时最多等10秒(超时未找到才报错)
driver.implicitly_wait(10)
#显性等待:针对特定元素,等它可点击再操作(10秒内满足条件就执行,不浪费时间)
WebDriverWait(driver,10).until(
EC.element_to_be_clickable((By.ID,submit-btn))#条件:元素可点击
).click()
若元素提前加载完成,多余等待会浪费时间(比如脚本跑100个用例,每个多等2秒,累计浪费200秒);
若元素加载慢于n秒,等待结束后元素仍未出现,会导致定位失败。
问题:用Pytest运行测试用例时,如何只执行标记为“接口”的用例?如何跳过某个已知失败的用例?
答案:
需用@pytest.mark标记用例,配合命令行参数或装饰器实现:
标记并执行指定用例:
importpytest
#标记用例类型
@pytest.mark.api#标记为接口用例
deftest_login():
assert1==1
@pytest.mark.ui#标记为UI用例
deftest_home_page():
assert2==2
命令行执行“仅接口用例”:pytest-mapitest_case.py(需先安装pytest:pipinstallpytest)。
跳过已知失败的用例:
@pytest.mark.skip(reason=接口临时维护,暂不执行)#无条件跳过
deftest_pay():
assert3==4
#条件跳过(比如Python版本3.8时跳过)
importsys
@pytest.mark.skipif(sys.version_info(3,8),reason=需Python3.8+)
deftest_new_feature():
assert5==5
二、进阶篇(考察框架设计与问题解决)
问题:在接口自动化中,如何处理“依赖接口”(比如测试“下单”接口前,必须先调用“登录”获取token)?请用Pytest写示例。
答案:
用Pytest