以海盗商城网站为环境,进行selenium自动化测试,用unittest框架组织和执行测试用例,使用Jenkins工具定时执行并发送邮件。
流程一:前台购物:
注册+登录+搜索商品+添加购物车+结算+添加收货地址+付款
流程二:用户个人信息修改
登录+账号设置+个人资料+提交
流程三:
后台管理员登录+商品管理+添加商品+输入名称、分类、品牌+提交
1.元素定位8中方式:
2、对应的操作
3.等待方式有三种:隐式等待、显示等待、强制等待
显示等待:WebDriverWait(driver, 30, 0.5).until(expected_conditions.alert_is_present())
4.窗口切换:
new_windows=driver.window_handles[-1]
driver.switch_to.window(new_windows)
5.下拉框选择
①先定位下拉框
element=river.find_element_by_id("add-new-area-select")
②进行选择
Select(element).select_by
三种方式
.select_by_value
.select_by_index
.select_by_visible text
6.多个元素用find_elements(..)[0]
7.如何操作日历控件
scipt = 'document.getElementById("date").removeAttribute("readonly")'
driver.execute_script(scipt)
driver.find_element_by_id("date").clear()
driver.find_element_by_id("date").send_keys("1996-03-11")
8.弹出框的处理
9.其他定位方面
多个class属性中间用.连接
driver.find_element_by_css_selector(".shopCar_btn_03.fl").click()
10.验证码的处理方式
11.切换frame
driver.switch_to.frame("mainFrame")
12.元素的高级操作
ActionChains(driver).double_click(driver.find_element_by_id("7")).perform()
13.如何上传图片
driver.find_element_by_name("file").send_keys(r"C:\Users\38689\Pictures\111.jpg")
14.css书写
使用unittest框架来组织测试用例
unitest相关要点:
1.以unitest为框架的类,需要继承unitest.Testcase,如:
class login(unitest.Testcase)
2.方法命名需要以test开头,类中的执行顺序根据test后面的ASCII顺序执行
3. setup()、teardown() 与setUpClass()、tearDownClass()的区别
setup()、teardown() 在每一个方法开始结束前都进行执行;
setUpClass()、tearDownClass()只在类中所有方法开始前、结束后执行一次
setUpClass()、tearDownClass()上面需要增加@classmethod
@classmethod
def setUpClass(cls):
cls.driver =webdriver.Chrome()
cls.driver.implicitly_wait(5)
cls.driver.maximize_window()
@classmethod
def tearDownClass(cls):
time.sleep(5)
cls.driver.quit()
4.将打开关闭浏览器的重复代码单独创建父类class baseTestCase(unitest.Testcase),以后的测试用例继承这个父类 class login(baseTestCase)
5.unittest的main方法作用
6.数据驱动测试:
①将测试数据放入csv文件,直接在方法中用for循环读取文件
②创建一个读取csv文件的方法,在测试方法中调用读取文件方法,然后用ddt传入数据,每行测试数据都是一个单独的用例,其中有一条失败不影响其他用例的执行
import ddt
import unittest2
from ceshikuangjia.BaseTestCase import BaseTestCase
from func.csvFileManager2 import reader
@ddt.ddt
class register3(BaseTestCase):
table=reader("register_testcase.csv")
@ddt.data(*table)
def test_register(self,row):
self.driver.get("http://127.0.0.1/index.php?m=user&c=public&a=reg")
self.driver.find_element_by_name("username").send_keys(row[0])
self.driver.find_element_by_name("password").send_keys(row[1])
self.driver.find_element_by_name("userpassword2").send_keys(row[2])
self.driver.find_element_by_name("mobile_phone").send_keys(row[3])
self.driver.find_element_by_name("email").send_keys(row[4])
# self.driver.find_element_by_class_name("reg_btn").click()
# print(self.table)
# print(*self.table)
if __name__ == '__main__':
unittest2.main()
7.使用断言来进行用例执行结果的判断
检查点有网页标题、网址、元素的文本、元素的属性
self.driver.title
self.driver.current_url
self.assertEqual("我的会员中心 - 道e坊商城 - Powered by Haidao",self.driver.title)
self.assertEqual("http://127.0.0.1/index.php?m=user&c=index&a=index", self.driver.current_url)
self.assertEqual("您好 user", welcome)
self.assertEqual("搜 索", search)
8.组织和执行测试用例
可以使用多种方式组织、执行批量测试用例,基本步骤可以分为:一、找出要执行的测试用例,并按顺序放置到suite套件里(如果有要求);二、执行suite套件的运行方法
新建一个脚本驱动文件
一、找出测试用例:
①使用discover方法找到所有需要执行的测试用例
测试文件路径、测试文件命名规则
suite = unittest.defaultTestLoader.discover("./test_case","*Test.py")
②使用addtest按顺序添加测试方法
suite=unittest.TestSuite()
suite.addTest(TestB("testA"))
suite.addTest(TestA("testB"))
suite.addTest(TestB("testC"))
③使用make suite调用其他文件的类名
二、执行:
runner = unittest.TextTestRunner()
runner.run(suite)
9.生成HTML测试报告
①将HTMLTestRunner.py文件放到项目中
②使用HTMLTestRunner这个类代替TextTestRunner来执行测试用例
path = "report/TestReport1.html"
file = open(path,"wb")
runner=HTMLTestRunner(stream=file, verbosity=1,title="自动化测试报告",description="测试环境:Chrome", tester ="111")
runner.run(suite)
测试报告示例:
利用jenkins工具构建脚本定时执行、发送邮件、SVN版本控制
1.定时执行测试任务
2. 设置邮件提醒
邮件发送效果:
3.SVN版本控制