web(ui)自动化测试

 

1.环境搭建

工具:Selenium2.48(pip安装);Webdriver(搜索淘宝NPM进行下载chromedriver)。

驱动:浏览器的版本和驱动版本要一致;Webdriver最好设置为环境变量,或者放在python路径下即可。

 

2.元素定位

定位方法:id、name、class_name、tag_name、link_text、partial_link_text、xpath、css_selector
如driver.find_element_by_id("userA").send_keys('123')

 

By类写法:driver.find_element(By.CSS_SELECTOR,'#kw').send_keys("python"),二者底层逻辑一样。

注意点:多个元素是find_elements。

 

xpath对比css_selector

元素名://input——input
id://input[@id='userA']——@userA
class://*[@class='telA']——.telA
属性: //*[text()= 'xxx']——input[type^='p'];//*[statrswith(@attribute, 'xxx')]——input[type$='d'];//*[contains(@attribute, 'xxx')]——input[type*='w']

 

3.操作方法

元素方法:clear() 、send_keys()、click()、maximize_window()、size、text、title、current_url、get_attribute()、is_display()、is_enabled()

 

浏览器方法:set_window_size(100,100)、set_window_position(300,200)、back()、forward()、refresh()、close()、quit()、switch_to.alert

 

元素等待方法显式等待:element = WebDriverWait(driver,5).until(expected_conditions.presence_of_element_located((By.ID, 'userA')))
隐式等待:implicitly_wait(10)
强制等待:time.sleep(3)

 

鼠标方法

action=ActionChains(driver)
action.context_click()、double_click()、drag_and_drop()、move_to_element()、-每个动作后都得执行

 

键盘方法

send_keys(Keys.BACK_SPACE)、Keys.SPACEKeys.TAB、Keys.ESCAPE、Keys.ENTER、Keys.CONTROL,'a'、Keys.CONTROL,'c'等等

 

下拉框

select=Select(driver.find_element_by_id("selectA"))
select.select_by_index()、select_by_value()、select_by_visible_text()

 

警告框

alert=driver.switch_to.alert
alert.text、accept()、dismiss()

 

滚动条控制

js="window.scrollTo(0,1000)"或js = "document.documentElement.scrollTop = 1000"
driver.execute_script(js)

 

表单切换

switch_to.frame("myframe1")
switch_to.default_content()

 

窗口切换

current_window_handle
window_handles
switch_to.window(handle)

 

窗口截图

get_screenshot_as_file(imgpath)
save_screenshot(imgpath)

 

验证码处理方式

去掉验证码(测试环境下-采用)
设置万能验证码(生产环境-采用)
验证码识别工具(通过Python-tesseract)

手工处理:验证码在接口返回,在logs文件里获取。获取cookie

 

记录cookie(通过记录cookie进行登录-推荐)

get_cookie(key)
get_cookies()
add_cookie(dict)

 

4.UnitTest

TestCase:一条用例就是一个完整的测试流程。

用法
import unittest
继承unittest.TestCase
命名必须以test开头

 

TestSuite

TestSuite测试套件:多条测试用例集合统一执行。
方式1:suite=unittest.TestSuite()
suite.addTest("ClassName(MethodName)")或
suite.addTest(unittest.makeSuite(ClassName))
方式2:suite=unittest.defaultTestLoader.discover("./cases",pattern="testcase_*.py")
TestSuite需要配合TextTestRunner才能被执行

 

TextTestRunner

TextTestRunner测试运行器:执行测试。
runner=unittest.TextTestRunner()runner.run(suite)

 

Fixture

Fixture固件:用于处理执行测试用例的一些准备工作。比如测试用例环境的搭建和销毁、数据库连接、初始数据、数据清理工作、开启临时服务。
必须继承unittest.TestCase类,setUp、tearDown才是一个Fixture;

setUp:一般做初始化工作,比如:实例化浏览器、浏览器最大化、隐式等待设置
tearDown:一般做结束工作,比如:退出登录、关闭浏览器
如果一个测试类有多个test开头方法,则每个方法执行之前都会运行setUp、结束时运行tearDown

 

5.测试报告

Export Test Results (UnitTest 自带)

使用控制台左边右上角的按钮。

 

HTMLTestRunner(第三方模板)

suite = unittest.defaultTestLoader.discover("./cases", pattern="testcase_*.py")
with open("./reports/测试报告1.html", "wb") as f:
   runner = HTMLTestRunner(stream=f, title="测试报告", description="测试用例")runner.run(suite)

上一篇:测试模块_doctest_unittest


下一篇:unittest测试框架(11)