软件测试
一.selenium自动化测试---测试工具
1.定位
By ID driver.findElement(By.id(<element ID>)) 定位元素使用ID属性
By name driver.findElement(By.name(<element name>)) 定位使用Name属性的元素
By class name driver.findElement(By.className(<element class>)) 定位使用类属性的元素
By tag name driver.findElement(By.tagName(<htmltagname>)) 定位使用HTML标记元素
By link text driver.findElement(By.linkText(<linktext>)) 定位使用的链接文字链接
By partial link text driver.findElement(By.partialLinkText(<linktext>)) 定位链接使用链接的文字部分
By CSS driver.findElement(By.cssSelector(<css selector>)) 定位使用CSS选择器的元素
By XPath //更多请阅读:https://www.yiibai.com/selenium/selenium_locators.html
2.基本操作
2.基本操作
(1)下拉框
select=Select(driver.find_element(By.ID,'utype'))
select.select_by_visible_text('教工')
(2)滚动条
driver.execute_script('window.scrollTo(0,400)')
(3)ActionChains进行点击(鼠标)操作
如:A=driver.find_element(By.ID,"input_username")
# 鼠标双击
sleep(2)
ActionChains(driver).double_click(A).perform()
(4)键盘操作
如:
# 复制
driver.find_element(By.ID,'input_username').send_keys(Keys.CONTROL,'a')
sleep(1)
# 剪切
driver.find_element(By.ID,'input_username').send_keys(Keys.CONTROL,'x')
sleep(2)
# 粘贴
driver.find_element(By.ID,'input_password').send_keys(Keys.CONTROL,'v')
5.(窗口)
# 切换窗口 0,1,2,,3,4......
# driver.switch_to.window(driver.window_handles[1])
# 删除窗口
# driver.execute_script("arguments[0].removeAttribute('target')",定位)
6.截图
# 截图
driver.get_screenshot_as_file(r"E:\jietu.png")
7.关闭窗口
driver.close()是关闭单个浏览器窗口;
driver.quit()是关闭所有的浏览器窗口;
二.unittest测试框架
1.方法(set up:测试执行前 teardown:测试执行之后 setupclass:每一个测试集执行前执行 teardownclass:每一个测试集执行后执行)
2.框架(1)setUp/tearDown
import unittest
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from time import sleep
# unittest测试框架(set up:测试执行前 teardown:测试执行之后 setupclass:每一个测试集执行前执行 teardownclass:每一个测试集执行后执行)
class Denglu(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(5) #等待5秒,5秒内发现即可
def tearDown(self):
self.driver.close()
# 测试框架1
def test_denglu01(self):
self.driver.get('http://www.baidu.com')
self.driver.find_element(By.ID, 'kw').send_keys('python')
self.driver.find_element(By.ID, 'su').click()
sleep(5)
# 测试框架2
def test_denglu02(self):
self.driver.get('http://www.baidu.com')
self.driver.find_element(By.ID, 'kw').send_keys('python')
self.driver.find_element(By.ID, 'su').click()
self.driver.find_element(By.PARTIAL_LINK_TEXT, 'Welcome to Python.org').click()
sleep(15)
print("002")
if __name__ == '__main__': # 执行框架
unittest.main()
2.框架(2):setUpClass/tearDownClass
import unittest
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from time import sleep
class Denglu(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Chrome()
cls.driver.implicitly_wait(5) # 执行每一个测试用例等待5秒
@classmethod
def tearDownClass(cls):
cls.driver.close()
def test_denglu01(self):
self.driver.get('http://www.baidu.com')
print('测试用例1')
def test_denglu02(self):
print('测试用例2')
if __name__ == '__main__':
unittest.main()
三.csv文件读取
例如:
import csv
def read():
path = r'E:\cs.csv' # 存放文件的路径
stream = open(path, 'r') # 以只读形式打开
data = csv.reader(stream) # 进行数据格式转换
list = []
i = 0
for row in data:
if i != 0:
list.append(row) # 将读取的数据存放在list列表中
i = i + 1
return list
if __name__ == '__main__':
data = read()
for row in data:
print(row)
四.csv与unittest连用---数据驱动
import unittest
import ddt as ddt
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from 软件测试.csv001 import read
# 导入csv001中的read方法
# ddt装饰器
@ddt.ddt
class Data_text(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(5)
def tearDown(self):
self.driver.quit()
steam = read() #接收数据
@ddt.data(*steam)
def test_001(self, list): //list存放ddt.data(*steam)数据
self.driver.get('https://data.sdbi.edu.cn/user/login/index.html')
# 共三行循环三次,每一行为一个list,第一个数据为list[0]
self.driver.find_element(By.ID, 'input_username').send_keys(list[0])
sleep(3)
if __name__ == '__main__':
unittest.main()
五.discover运行测试用例
import unittest
test_dir = './软件测试' # 包
discover = unittest.defaultTestLoader.discover(test_dir, pattern='unit_测试01.py') # pattern类
if __name__ == '__main__':
runner = unittest.TextTestRunner()
runner.run(discover)
六.编写测试报告
import unittest
import now as now
from HTMLTestRunner import HTMLTestRunner
test_dir = './软件测试' # 包
discover = unittest.defaultTestLoader.discover(test_dir, pattern='unit_测试01.py') # pattern类
if __name__ == '__main__':
report_dir='./软件测试'
report_name=report_dir+'/'+now+'报告测试'
with open(report_name,'wb') as f:
runner=HTMLTestRunner(stream=f,title='报告',description='测试报告标题')
runner.run(discover)
f.close()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?