- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
Python自动化测试面试题及答案
一、基础应用类
问题:Python自动化测试中,unittest和pytest的核心区别是什么?实际项目中你更倾向选哪个?为什么?
答案:
核心区别有3点:①用例组织:unittest需继承TestCase类,pytest支持函数/类(无需继承);②参数化:unittest需借助ddt库,pytest用@pytest.mark.parametrize原生支持,语法更简洁;③Fixture:unittest靠setUp/tearDown(仅支持类级/方法级),pytestFixture可自定义作用域(函数/类/模块/会话),还能跨用例共享(如登录态)。
实际选pytest,因为项目中常需多模块复用登录、环境初始化等逻辑,Fixture的灵活度能减少重复代码;且pytest的断言更自然(支持asserta==b,无需self.assertEqual),报错信息也更清晰,定位问题更快。
问题:Selenium中常用的元素定位方式有哪些?当遇到动态ID(如每次刷新ID带随机数)时,你会怎么处理?
答案:
常用定位方式:id、name、class_name、xpath、css_selector、link_text、partial_link_text、tag_name。
动态ID处理:①优先用相对xpath,避开动态部分,比如ID是“user_12345”(12345随机),可写//input[contains(@id,user_)];②若元素有唯一属性(如data-name、placeholder),用//input[@data-name=username];③若元素在固定层级,用父子/兄弟关系定位,比如//div[@class=login-form]/input;④绝对不用tag_name(除非页面只有一个该标签),避免定位到多个元素。
问题:Selenium中如何处理下拉框?分两种情况说明(select标签和非select标签)。
答案:
①select标签下拉框:用Selenium的Select类,先定位到select元素,再通过select_by_value(值)、select_by_visible_text(文本)、select_by_index(索引)选择,比如:
fromselenium.webdriver.support.selectimportSelect
select_ele=driver.find_element(By.ID,city)
Select(select_ele).select_by_visible_text(上海)
②非select标签(如div/ul模拟的下拉框):先点击下拉框触发展开,再定位到目标选项点击,注意加显式等待避免元素未加载:
#点击展开下拉框
driver.find_element(By.ID,city-dropdown).click()
#等待选项加载,再点击
WebDriverWait(driver,10).until(
EC.visibility_of_element_located((By.XPATH,//li[text()=上海]))
).click()
二、框架与设计类
问题:什么是PO模式(PageObjectModel)?你在项目中是怎么设计PO层的?有什么好处?
答案:
PO模式是把页面的元素定位和操作逻辑封装成独立“页面类”,测试用例只调用页面类的方法,不直接写定位和操作。
项目设计:①每个页面一个类(如LoginPage、HomePage);②类中定义“元素定位”(用元组存,如username_input=(By.ID,username))和“操作方法”(如definput_username(self,text):self.driver.find_element(*self.username_input).send_keys(text));③抽一个BasePage类,封装通用方法(如find_element、click、send_keys,包含显式等待),所有页面类继承BasePage。
好处:①解耦:页面改版时,只改对应页面类,不用改所有用例;②复用:多个用例用到同一页面操作(如登录),只需调用一次方法;③可读性高:用例里看的是login_page.login(admin,123),清晰知道做什么,不用看一堆定位代码。
问题:接口自动化测试中,如何用requests库发送POST请求?如果接口需要登录态(Cookie/Ses
文档评论(0)