我是一个测试,每天最烦的就是上传bug,为了简化自己的工作量,也是为了偷懒,所以写了一个根据python+selenium上传exel表中的脚本,脚本有什么不得当之处,请大家谅解。
环境准备:
1.python2.7/python3.5(我现在自己用的环境是2.7)
2.禅道专业版 5.5.1
3.exel表(这是我自己bug记录表格,应为cnds无法上传文件,所以放在我的百度云里链接:http://pan.baidu.com/s/1c9rBrC)
python需要的库
1.xlrd(操作exel表),time(时间),selenium(自动化)
代码:
(我取名为get_chandao.py(这个无所谓的))
#coding:utf-8
import sys, os, xlrd, time, login
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
reload(sys)
sys.setdefaultencoding('utf8')
#自定义输入文件
version = "Trunk" #影响版本号
file_name = 'kmj_20161208_B2C安卓Newbuglist_沈伟.xlsx' #定义exel文件路径
data = xlrd.open_workbook(file_name.decode('utf8')) #打开文件数据
table = data.sheets()[0] #获取整行的值
nrows = table.nrows #获取列数
driver = webdriver.Firefox()
#用户登录
login.login(driver)
#执行上传操作
for num in range(4,(nrows+1)):
bug_id = (table.cell(num, 1).value) #BUG_ID
bug_title = (table.cell(num, 2).value) #摘要
Operating_steps = (table.cell(num, 4).value) #操作步骤
Expected_result = (table.cell(num, 5).value) #预期结果
Test_result = (table.cell(num,6).value) #测试结果
Seriousness = (table.cell(num,7).value) #严重性
Bug_Assign = (table.cell(num,13).value) #bug指派人
Yes_not_image = (table.cell(num,11).value) #是否图片
repro_steps = '[步骤]' + Operating_steps+'\n', '[结果]' +Test_result+ '\n', '[期望]' +Expected_result
driver.find_element_by_xpath('//*[@id="createActionMenu"]/a').click() #点击提bug按钮
#影响版本
def Impact_version(driver, version):
driver.find_element_by_xpath('//*[@id="openedBuild_chosen"]/ul/li/input').click()
driver.find_element_by_xpath('//*[@id="openedBuild_chosen"]/ul/li/input').send_keys(version)
driver.find_element_by_xpath('//*[@id="openedBuild_chosen"]/ul/li/input').send_keys(Keys.ENTER)
#严重程度判断
def Severity(Seriousness,driver):
print (Seriousness)
severity = Seriousness.split('.')[1] #严重程度
s1 = Select(driver.find_element_by_id('severity')) # 实例化Select
# driver.find_element_by_id('severity').click()
if severity == '重大错误':
s1.select_by_value("1")
elif severity == '严重错误':
s1.select_by_value("2")
elif severity == '次要错误':
s1.select_by_value("3")
elif severity == '轻微错误':
s1.select_by_value("4")
#重现步骤
def Repro_steps(driver, repro_steps):
xf = driver.find_element_by_xpath('//*[@id="dataform"]/table/tbody/tr[6]/td/div[2]/div[2]/iframe')
driver.switch_to_frame(xf)
driver.find_element_by_xpath('/html/body/p').send_keys(Keys.CONTROL,'a')
driver.find_element_by_xpath('/html/body/p').send_keys(Keys.BACK_SPACE)
driver.switch_to_default_content()
driver.find_element_by_id('title').send_keys(bug_title)
driver.switch_to_frame(xf)
driver.find_element_by_xpath('/html/body').send_keys(repro_steps)
driver.switch_to_default_content()
#当前指派
def Assgin(driver):
driver.find_element_by_xpath(".//*[@id='assignedTo_chosen']/a").click()
driver.find_element_by_xpath(".//*[@id='assignedTo_chosen']/div/div/input").send_keys(Bug_Assign)
driver.find_element_by_xpath(".//*[@id='assignedTo_chosen']/div/div/input").send_keys(Keys.ENTER)
#是否上传图片
def Image(driver):
if Yes_not_image == '':
pass
elif Yes_not_image == '是':
driver.find_element_by_class_name('fileControl').send_keys((os.getcwd()+'\\'+bug_id+'.png'))
#运行
def get_chandao(driver):
Impact_version(driver, version)
Repro_steps(driver, repro_steps)
Severity(Seriousness,driver)
Image(driver)
Assgin(driver)
driver.find_element_by_id('submit').click() #点击保存按钮
#主运行组合
def run():
#执行对exel表的上传操作
get_chandao(driver)
driver.quit()
if __name__ == '__main__':
run()
这个里面有导入一个login的模块
(我取名为login.py,将这个放在与get_chandao.py目录下)
#coding:utf-8
from selenium import webdriver
import time
#登录
def login(driver):
url = 'http://192.168.1.42/pro/user-login-L3Byby8=.html'
driver.get(url)
driver.implicitly_wait(30)
driver.find_element_by_id('account').clear()
driver.find_element_by_id('account').send_keys('admin')
driver.find_element_by_name('password').clear()
driver.find_element_by_name('password').send_keys('123456')
driver.find_element_by_id('submit').click()
driver.get("http://192.168.1.42/pro/bug-browse-1.html") #跳转到测试模块
time.sleep(1)
操作方法:
1.将需要上传的exel放在get_chandao.py目录下,附件有例子
2.在get_chandao.py定义好你的file_name和verision
3.直接执行get_chandao.py
备注:
这只是写的基础的,大家可以参考就好了还有很多可以改进的地方,