等价类划分法、边界值法、错误推测法是平时工作中最常用的方法
方法一:等价类划分法
将所有可能的输入数据划分为若干子集,从每一个子集中,挑选任意输入数据,测试效果是一样的。
方法二:边界值分析法
对输入或输出的边界值进行测试的一种黑盒测试方法,即选取边界值进行测试。因为测试数据的边界值在程序中最容易出错,所以边界值应该重点测试。
方法三:错误推测法
基于对被测软件系统的理解、过往经验以及个人直觉,推测出软件可能存在的缺陷,从而有针对性地设计测试用例的方法。
即错误的操作,比如输入输出数据为0或空格等容易错误的情况。将其作为测试用例来执行。
解释一:边界值法设计用例步骤
1、明确需求
2、确定有效和无效等价类
3、确定边界范围值
4、提取数据编写测试用例
使用场景
在等价类的基础上针对有边界范围的测试数据输入的地方(重点关注边界)
常见词语描述:大小、尺寸、重量、最大、最小、至多、至少等修饰词语
典型代表:有边界范围的输入框类测试
代码总结:
导入模块:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.waite import WebDriverWait
import unittest
import ddt
from readdata import readcsv
import csv
#导入下拉框操作
from selenium.webdriver.support.select import Select
#导入鼠标操作
from selenium.webdriver.common.action_chains import ActionChains
#导入键盘操作
from selenium.webdriver.keys import Keys
输入框操作:
#在输入框输入输入内容:
element.sendKeys("文本内容")
#将输入框清空
element.clear()
#获取输入框的文本内容
element.getText()
下拉框
定位下拉框
Select select = new Select(driver.find_element(By.ID(“select”)));
select.selectByVisibleText(“A”);
select.selectByValue(“1”);
select.deselectAll();
select.deselectByValue(“1”);
select.deselectByVisibleText(“A”);
select.getAllSelectedOptions();
select.getFirstSelectedOption();
单选框
定位单选框
WebElement radio=driver.find_element(By.ID("id值"))
radio.click(); //选择某个单选项
radio.clear(); //清空某个单选项
radio.isSelected(); //判断某个单选项是否已经被选择
弹框对话框
Alert alert=driver.switch_to.alter()
alter.accept()
alter.dismiss()
alter.text
滚动条:
scrollTo(x,y)
js="window.scrollTo(100,400);"
driver.execute_script(js)
读取csv文件:
import csv def readcsv(): path=r"C:\Users\墨,漓汐\Desktop\demo.csv" stream=open(path,'r',encoding='gb2312') data=csv.reader(stream) list=[] i=0 for row in data: if i!=0: list.append(row) i=i+1 return list if __name__ == '__main__': data=readcsv() for row in data: print(row)
import csv
def readcsv():
path=r"C:\Users\墨,漓汐\Desktop\demo.csv"
stream=open(path,'r',encoding='gb2312')
data=csv.reader(stream)
list=[]
i=0
for row in data:
if i!=0:
list.append(row)
i=i+1
return list
if __name__ == '__main__':
data=readcsv()
for row in data:
print(row)
数据驱动及断言例子:
import unittest import ddt import time from selenium import webdriver from selenium.webdriver.common.by import By from readscv import readcsv from selenium.webdriver.support.ui import WebDriverWait @ddt.ddt() class runtestdata(unittest.TestCase): stream_info = readcsv() def setUp(self): self.driver.implicitly_wait(30) self.driver = webdriver.Chrome(r"C:\Users\墨,漓汐\Downloads\chromedriver.exe") self.driver.get("http://192.168.30.253/bsams/front/login.do") self.driver.maximize_window() self.driver.find_element(By.ID, "taskId").send_keys("4") self.driver.find_element(By.XPATH, "//*[@id='loginName']").send_keys("076wan") self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("076wan") self.driver.find_element(By.XPATH, "//*[@id='vericode']").send_keys("shtd") self.driver.find_element(By.CLASS_NAME, "dl-button").click() def tearDown(self): self.driver.close() @ddt.data(stream_info) def testone(self,list): for item in list: # print(item[0]) # print(100*'-') self.driver.find_element(By.LINK_TEXT, "品牌").click() self.driver.find_element(By.XPATH,"/html/body/div[2]/div/div[2]/div[2]/div[1]/div/input").click() self.driver.find_element(By.XPATH,"/html/body/div[6]/div[1]/div[2]/div[2]/div[1]/div/div[2]/form/div[1]/div[2]/input").send_keys(item[0]) self.driver.find_element(By.XPATH,"/html/body/div[6]/div[1]/div[2]/div[2]/div[1]/div/div[2]/form/div[2]/div[2]/input").send_keys(item[1]) self.driver.find_element(By.XPATH,"//*[@id='cboxLoadedContent']/div/div[3]/a[2]").click() ss=self.driver.switch_to.alert.text self.assertEqual(ss,'保存成功!') self.driver.switch_to.alert.accept() if __name__ == '__main__': unittest.main()
import unittest
import ddt
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
#从py文件名为readscv中导入readcsv方法函数
from readscv import readcsv
from selenium.webdriver.support.ui import WebDriverWait
@ddt.ddt()
class runtestdata(unittest.TestCase):
stream_info = readcsv()
def setUp(self):
self.driver.implicitly_wait(30)
self.driver = webdriver.Chrome(r"C:\Users\墨,漓汐\Downloads\chromedriver.exe")
self.driver.get("http://192.168.30.253/bsams/front/login.do")
self.driver.maximize_window()
self.driver.find_element(By.ID, "taskId").send_keys("4")
self.driver.find_element(By.XPATH, "//*[@id='loginName']").send_keys("076wan")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("076wan")
self.driver.find_element(By.XPATH, "//*[@id='vericode']").send_keys("shtd")
self.driver.find_element(By.CLASS_NAME, "dl-button").click()
def tearDown(self):
self.driver.close()
@ddt.data(stream_info)
def testone(self,list):
for item in list:
# print(item[0])
# print(100*'-')
self.driver.find_element(By.LINK_TEXT, "品牌").click()
self.driver.find_element(By.XPATH,"/html/body/div[2]/div/div[2]/div[2]/div[1]/div/input").click()
self.driver.find_element(By.XPATH,"/html/body/div[6]/div[1]/div[2]/div[2]/div[1]/div/div[2]/form/div[1]/div[2]/input").send_keys(item[0])
self.driver.find_element(By.XPATH,"/html/body/div[6]/div[1]/div[2]/div[2]/div[1]/div/div[2]/form/div[2]/div[2]/input").send_keys(item[1])
self.driver.find_element(By.XPATH,"//*[@id='cboxLoadedContent']/div/div[3]/a[2]").click()
ss=self.driver.switch_to.alert.text
self.assertEqual(ss,'保存成功!')
self.driver.switch_to.alert.accept()
if __name__ == '__main__':
unittest.main()