1. 键盘事件
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep
d=webdriver.Chrome()
d.get('http://192.168.0.149/bbs/forum.php')
d.maximize_window()
sleep(2)
d.find_element_by_id('kw').send_keys('武汉多测师师师')
sleep(2)
d.find_element_by_id('kw').send_keys(Keys.BACKSPACE*2)
sleep(2)
d.find_element_by_id('kw').send_keys(Keys.CONTROL,'a')
sleep(1)
d.find_element_by_id('kw').send_keys(Keys.CONTROL,'c')
sleep(1)
d.find_element_by_id('kw').send_keys(Keys.CONTROL,'v'*2)
sleep(1)
d.find_element_by_id('kw').send_keys(Keys.LEFT)
2. 用例封装
import unittest
class dome(unittest.TestCase):
def test_case_1(self):
print('迪迦奥特曼')
def test_case_2(self):
print('泰罗奥特曼')
def test_case_3(self):
print('戴拿奥特曼')
def test_case_4(self):
print('艾斯奥特曼')
def test_case_5(self):
print('捷德奥特曼')
if __name__ == '__main__':
suite=unittest.TestSuite()
# suite.addTest(dome('test_case_3'))
# suite.addTest(dome('test_case_4'))
tests=[dome('test_case_3'),dome('test_case_4')]
suite.addTests(tests)
runner=unittest.TextTestRunner()
runner.run(suite)
3. unittest单元测试框架
Python中内置的单元测试框架
TestCase 数据测试基类,最基本的组成单元
setUp 初始化测试用例,在每条测试用例方法执行前执行一次
tearDown 还原测试场景,在每条测试用例方法执行后执行一次
setUpClass 初始化测试用例类,在每个测试用例类执行前只执行一次
tearDownClass 还原测试类的场景,在每个测试用例类执行后只执行一次
用例顺序:setUpClass -> setUp -> testcase -> tearDown -> tearDownClass
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep
import unittest
class landing(unittest.TestCase):
def setUp(self) -> None:
self.d = webdriver.Chrome()
self.d.maximize_window()
self.d.get('http://192.168.0.149/bbs/forum.php')
sleep(2)
def tearDown(self) -> None:
self.d.find_element_by_xpath('//*[@id="lsform"]/div/div/table/tbody/tr[2]/td[3]/button/em').click()
sleep(2)
self.d.quit()
def test_case1(self):
self.d.find_element_by_id('ls_username').send_keys('admin')
sleep(1)
self.d.find_element_by_id('ls_password').send_keys('123456')
sleep(1)
if __name__ == '__main__':
unittest.main()
TestSuite 测试用例套件,收集测试用例
addtest() 将单条用例添加到套件中
addtests() 将多条用例一次性全部添加到套件中
TestLoader 定义了用例名称规则,用例名称前缀必须是test
TestTextRunner 提供了运行用例或者套件的函数
run() 运行测试用例或测试套件
import unittest
from HTMLTestRunner import HTMLTestRunner
from time import strftime
t=strftime('%Y-%m-%d_%H:%M:%S')
tl=unittest.TestLoader()
suit=tl.discover('E:\wuhan2\day11_lianxi',pattern='test_*.py')
report='E:\wuhan2\day11_lianxi\\testreport{}.html'.format(t)
with open(report,'wb') as f:
runner=HTMLTestRunner(stream=f,tester='chenyu')
runner.run(suit)
TestResult 收集测试结果
main() 主函数:当使用主函数运行测试用例时,用例的执行顺序为ascii表顺序匹配
0-9 A-Z a-z
unittest 中内置的断言方法
assertEqual(a, b, msg) 断言a == b,否则抛出定义的msg信息
assertNotEqual(a, b, msg) 断言a != b,否则抛出定义的msg信息
assertIn(a, b, msg) 断言a in b,否则抛出定义的msg信息
assertNotIn(a, b, msg) 断言a not in b,否则抛出定义的msg信息
assertFalse(exp, msg) 断言表达式exp结果为False,否则抛出定义的msg信息
assertTrue(exp, msg) 断言表达式exp结果为True,否则抛出定义的msg信息
unittest 自动化测试报告
1. 自定义测试报告模板HTMLTestRunner模块
Pytest => unittest => robotframework
. 表示成功
F 表示用例断言失败
E 表示代码语法等报错
4. ddt数据驱动
data driver test
不是python内置模块 pip install ddt
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep
import unittest
from ddt import ddt,data,unpack
from day11_lianxi.lianxi1 import *
@ddt
class landing(unittest.TestCase):
def setUp(self) -> None:
self.d = webdriver.Chrome()
self.d.maximize_window()
self.d.get('http://192.168.248.128/bbs/forum.php')
sleep(2)
def tearDown(self) -> None:
self.d.find_element_by_xpath('//*[@id="lsform"]/div/div/table/tbody/tr[2]/td[3]/button/em').click()
sleep(2)
self.d.quit()
@data(*get_test_data('E:\wuhan2\day11_lianxi\\11111.xlsx',0))
@unpack
def test_case1(self,username,passward):
self.d.find_element_by_id('ls_username').send_keys(username)
sleep(1)
self.d.find_element_by_id('ls_password').send_keys(passward)
sleep(1)
if __name__ == '__main__':
unittest.main()
|
|