参数化改进策略
- 把有效和无效的测试数据合并到一个测试方法里实现。
- 数据合并:容易
- 方法体合并:难度大
数据合并
- 有效:一个参数,改为两个参数
@pytest.mark.parametrize("division_name",["A","啊","1","#","我的测试赛区北京赛区上海赛区和广州赛区","123456789测试赛区ABCabc%"])
无效:两个参数,不用修改
@pytest.mark.parametrize("division_name,message",
[["","不能为空"],
["123456789测试赛区ABCabc%1","长度超过20"],
["123456789测试赛区ABCabc%1234567890","长度超过20"],
["东南赛区","赛区名称不能重复"]])
方法体合并-检查条件分析
- 如何区分有效和无效测试数据,进行对应的检查
方法体合并-有效和无效数据测试流程
- 有效和无效处理流程:
- 有效数据测试:
- 无效数据测试:
- 有效数据测试:
第三版第二子版本
- test_后台_双创_基础设置_赛区管理_添加赛区_case_v3_2.py
- 数据合并:
@pytest.mark.parametrize("division_name,message",
[["A","赛区信息保存成功"],
["啊", "赛区信息保存成功"],
["1", "赛区信息保存成功"],
["#", "赛区信息保存成功"],
["我的测试赛区北京赛区上海赛区和广州赛区", "赛区信息保存成功"],
["123456789测试赛区ABCabc%", "赛区信息保存成功"],
["","不能为空"],
["123456789测试赛区ABCabc%1","长度超过20"],
["123456789测试赛区ABCabc%1234567890","长度超过20"],
["东南赛区","赛区名称不能重复"]])
测试方法合并
def test_add_division(self,division_name,message):
self.login_to_add_division_page()
driver = self.driver
if message=="赛区信息保存成功": # 有效
driver.find_element(By.ID,"_easyui_textbox_input1").clear()
driver.find_element(By.ID,"_easyui_textbox_input1").send_keys(division_name)
driver.find_element(By.XPATH,"//span[text()='查询']").click()#查询
sleep(2)
# 有效数据查询并删除
if self.is_element_present(By.XPATH,f"//td[@field='name']/div[text()='{division_name}']"):
d=driver.find_element(By.XPATH,f"//td[div='{division_name}']/../td[@field='view']/div/a[2]")
d.click()#删除
driver.find_element(By.XPATH,"//span[text()='确定']").click()
sleep(3)
# 输入赛区名称
driver.find_element(By.XPATH,"//span[text()='添加赛区']").click()
WebDriverWait(driver,20).until_not(expected_conditions.presence_of_element_located((By.ID,"Loading")))
WebDriverWait(driver,13).until(expected_conditions.frame_to_be_available_and_switch_to_it("frmDlg"))
name_input=driver.find_element(By.ID,"_easyui_textbox_input1")
# 检查浮动提示
if message=="不能为空":
ActionChains(driver).move_to_element(name_input).perform() # 鼠标悬停在赛区名称文本框
tooltip = driver.find_element(By.CLASS_NAME, "tooltip").text
assert tooltip == "该输入项为必输项" # 检查出现浮动提示“该输入项为必输项”
# 滚动到底部
name_input.clear()
name_input.send_keys(division_name)
driver.switch_to.default_content()
js = 'window.scrollTo(0, document.body.scrollHeight);'
driver.execute_script(js)# 滚动条滑动到底部
WebDriverWait(driver,20).until(expected_conditions.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@data-itemid='213']")))
WebDriverWait(driver,13).until(expected_conditions.frame_to_be_available_and_switch_to_it("frmDlg"))
sleep(2)
submit_button=driver.find_element(By.ID,"pButton_ctlSave")
submit_button.click()#提交
sleep(1)
# 检查提示信息
driver.switch_to.parent_frame()
xpath1="//div[text()='赛区信息保存成功']" if message == "赛区信息保存成功" else f"//td[text()='{message}']"
assert self.is_element_present(By.XPATH,xpath1)
WebDriverWait(driver,20).until_not(expected_conditions.presence_of_element_located((By.XPATH,xpath1)))
# 无效数据时取消
if message!="赛区信息保存成功":
WebDriverWait(driver, 13).until(expected_conditions.frame_to_be_available_and_switch_to_it("frmDlg"))
driver.find_element(By.ID,"pButton_ctlCancel").click()#取消
# 等待消失滑动到顶部
driver.switch_to.default_content()
js2="window.scrollTo(document.body.scrollHeight, 0);"
driver.execute_script(js2)# 滚动条滑动到顶部
WebDriverWait(driver,20).until(expected_conditions.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@data-itemid='213']")))
WebDriverWait(driver,20).until_not(expected_conditions.presence_of_element_located((By.ID,"Loading")))
# 有效时查询赛区
if message == "赛区信息保存成功": #有效
driver.find_element(By.ID,"_easyui_textbox_input1").clear()
driver.find_element(By.ID,"_easyui_textbox_input1").send_keys(division_name)
driver.find_element(By.XPATH,"//span[text()='查询']").click()#查询
sleep(2)
# 检查存在后退出
assert self.is_element_present(By.XPATH,f"//td[@field='name']/div[text()='{division_name}']")
self.exit_and_close_browser()
运行调试脚本
- 运行后,查看结果