框架2.0(下)
停了好长一段时间没有更新,最近比较忙,以后坚持至少一个月内输出1篇,继续上次需要掌握的技能,这次主要的函数调用和测试用例集的批量执行.
8.函数调用其实在前面几篇也有讲到,主要用于登陆的用户名和密码组合测试,可以参考
创建一个mod_login_on.py
# _*_ coding: utf-8 _*_
from selenium import webdriver
from import By
from import Keys
from selenium.webdriver.support.ui import Select
from import NoSuchAttributeException
import unittest,time,re
from time import strftime, localtime
from datetime import datetime
#登陆函数
def login(self):
driver=self.driver
try:
driver.find_element_by_id("username").send_keys("admin")
driver.find_element_by_id("secret").send_keys("password1")
Select(driver.find_element_by_id('language')).select_by_value("en")
driver.find_element_by_id("login_button").click()
except:
driver.get_screenshot_as_file(u"D:/python/selenium_use_case/error_png/2.ext/2.1_%s.png" % datetime.now().strftime("%Y%m%d.%H%M%S.%f")[:-3])
调用登陆模块
# _*_ coding: utf-8 _*_
__author__ = 'leo'
__date__ = '2017/7/6 10:29'
from selenium import webdriver
from import By
from import Keys
from selenium.webdriver.support.ui import Select
from import NoSuchAttributeException
import unittest,time,re
from time import strftime, localtime
from datetime import datetime
import HTMLTestRunner
#import mod_login_on函数
from Pubilic_mod import mod_login_on
class Delext(unittest.TestCase):
def setUp(self):
self.driver=webdriver.Chrome()
self.driver.implicitly_wait(30)
self.base_url="http://192.168.1.131"
self.verificationErrors=[]
self.accept_next_alert=True
def test_Delext(self):
u"""2.2.1 删除所有"""
driver=self.driver
driver.get(self.base_url+"/")
#调用login模块
mod_login_on.login(self)
try:
time.sleep(3)
# driver.switch_to_alert().accept()
driver.implicitly_wait(3) #智能等待30
# driver.find_element_by_id("current").click()
driver.find_element_by_xpath(".//*[@id='nav']/ul/li[4]/a").click()
#切换到frame中再找到对应的元素
driver.switch_to.frame("mainscreen")
driver.find_element_by_xpath(".//*[@id='btn_new_bulkexten']/span/span").click()
driver.find_element_by_xpath(".//*[@id='btn_save_bulk']/span/span").click()
driver.find_element_by_id("CHECKALL").click()
driver.find_element_by_xpath(".//*[@id='btn_delete_selected']/span/span").click()
driver.switch_to_alert().accept()
#从frame中切回主文档
driver.switch_to.default_content()
driver.find_element_by_xpath(".//*[@id='applyChanges_Button']/font").click()
time.sleep(10)#等待10
except:
driver.get_screenshot_as_file(u"D:/python/selenium/error_png/2.ext/2.2/%s.png" % datetime.now().strftime("%Y%m%d.%H%M%S.%f")[:-3])
def tearDown(self):
time.sleep(3)
self.driver.quit()
self.assertEqual([],self.verificationErrors)
if __name__=="__main__":
suite=unittest.TestSuite()
suite.addTest(Delext("test_Delext"))
unittest.TextTestRunner().run(suite)
9.测试用例集批量执行,先讲一下框架,这边先主要讲分为三个大模块error_png,report,test_case三个一级目录,主要存放错误图片,测试报告,测试用例集
├─error_png
│ ├─1.login
│ ├─2.ext
├─report
└─test_case
└─case
├─A_login
│ └─case_a_logininterface.py
│ └─case_b_reset.py
├─B_ext
│ └─case_a_creat.py
│ └─case_b_reset.py
├─Pubilic_mod
│ └─mod_login_on.py
├─all_test.py
通过上面的图片可以看出主要的用例集合放在case文件夹下,按大用例集分不同的文件夹,下面包含对应的.py测试用例,和批量执行文件all_test.py
#coding=utf-8
import sys
from time import strftime, localtime
from datetime import datetime
from case.A_login import *
from case.B_ext import *
import unittest,doctest
import HTMLTestRunner
suite=unittest.TestSuite()
#login
suite.addTest(unittest.makeSuite(case_a_logininterface.LoginInterface))
suite.addTest(unittest.makeSuite(case_b_reset.LoginReset))
#ext
suite.addTest(unittest.makeSuite(case_a_creatext.Createext))
suite.addTest(unittest.makeSuite(case_b_delext.Delext))
filename='D:\\python\\selenium\\report\\result20_%s.html'% datetime.now().strftime("%Y%m%d.%H%M%S.%f")[:-3]
fp=open(filename,'wb')
runner=HTMLTestRunner.HTMLTestRunner(
stream=fp,
title='Report_title',
description='Report_descrition')
runner.run(suite)
a.需要说明下,这个在创建A_login的时候需要选择新建python package,会自动带一个init.py文件,有什么作用可以自行百度下,这边主要添加对应的py文件,如下图:
__init__.py在批量运行的文件中要import这些内容
from case.A_login import *
from case.B_ext import *
b.这边批量运行集合,主要跟单个运行添加测试到suite容器一样
if __name__=="__main__":
suite=unittest.TestSuite()
suite.addTest(Delext("test_Delext"))
unittest.TextTestRunner().run(suite)
在每个用例末尾使用unitest.TextTestRunner()来运行单个脚本中的多个case,这边的TextTestRunner在上篇文章讲过和HTMLTestRunner一样是继承了TestResult类,TextTestRunner这个主要以文本形式展示,HTMLTestRunner这个将统一展现在html上,这边通过统一的脚本添加所有的用例到suite容器中,run这些用例
suite=unittest.TestSuite()
#login
suite.addTest(unittest.makeSuite(case_a_logininterface.LoginInterface))
suite.addTest(unittest.makeSuite(case_b_reset.LoginReset))
最后运行输出的报告
测试报告