博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UI自动化笔记(四):框架搭建
阅读量:5354 次
发布时间:2019-06-15

本文共 8876 字,大约阅读时间需要 29 分钟。

  知识点: 

    1、Java单元测试工具:  junit  TestNG     Pthon单元测试工具:  unittest pytest pyunit   2、unittest原理:所有测试用例都必须在一个类里面,这个类继承了unittest中的TestCase类,下面的每一个测试用例都是一个测试方法,每一个测试方法以test开头, (属于成员方法),然后在主方法里面运行unittest.main()来批量执行测试用例
  3、suite套件的两种方法:     
      1、suite = unittest.TestSuite()         suite.addTest(Case01('runTest'))         suite.addTest(Case02('runTest'))         suite.addTest(Case03('runTest'))
      2、suite = unittest.defaultTestLoader.discover(start_dir='./cases/', pattern='case01*.py')
  4、批量运行用例三种方法:       1、unittest.main()       2、unittest.TextTestRunner().run(suite)
      3、filename = time.strftime('%Y%m%d_%H_%M_%S', time.localtime(time.time()))+'.html'          fp = open('./'+filename, 'wb')
        HTMLTestRunnerCN.HTMLTestRunner(             stream=fp,title='慧测自动化测试报告',description='11111',tester='张三'         ).run(suite)
  4、运行测试用例方法

方法一:在同一个文件中,unittest.main()执行测试用例

unittest.main()

方法二:suite套件执行测试用例

case文件夹

  case01.py文件(case02/case03以此类推)

#coding:utf-8 #登录 from selenium import webdriver import time import unittest class Case01(unittest.TestCase):  #对类进行注释或者对方法进行注释     '''测试的是登录,正向流程'''     def runTest(self):         '''11111111'''         driver = webdriver.Firefox()         self.driver = driver         driver.maximize_window()         driver.implicitly_wait(5)         driver.get('http://www.huicewang.com/ecshop/user.php')         driver.find_element_by_name('username').send_keys('zach')         driver.find_element_by_name('password').send_keys('1234567')         driver.find_element_by_name('submit').click()         time.sleep(8)         try:             username = driver.find_element_by_xpath("//font[@id='ECS_MEMBERZONE']/font/font[@class='f4_b']").text         except:             username = ''         self.assertEqual(username, 'zach', '登录失败')         print '登录成功'     def tearDown(self):         self.driver.close()

 

run.py文件 import unittest from cases.case01 import Case01 from cases.case02 import Case02 from cases.case03 import Case03    #直接引入【类】级别即可
suite = unittest.TestSuite()    #实例化一个测试套件 suite.addTest(Case01('runTest'))   #套件添加测试用例格式:suite.addTest(类名(方法名)) suite.addTest(Case02('runTest')) suite.addTest(Case03('runTest')) unittest.TextTestRunner().run(suite)  #批量执行用例集

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

 

 

 

 

 

 

 

 缺点:

  当用例过多时,需要加100遍

 

方法三:批量查找,批量加载discover

discover函数参数解释:起始路径+匹配对象+顶级路径,discover函数返回一个suite对象

默认测试加载器unittest.defaultTestLoader def discover(self, start_dir, pattern='test*.py', top_level_dir=None): #返回一个suite对象  
    start_dir:起始路径       pattern:匹配原则     top_level_dir:顶级搜索路径,如果None,默认从当前路径下开始搜索
suite = unittest.defaultTestLoader.discover(start_dir='./cases/', pattern='case01*.py') #返回一个suite对象,用suite接一下
unittest.TextTestRunner().run(suite)
 

 

 

 

 

 

 

 

 

 

5、unittest组织你的测试用例?什么维度?

 35分钟28秒

 1、所有测试用例放在一个文件的一个类中--------不支持

2、一个文件里面只有一个类,一个类中只有一个方法,一个方法就是一个测试用例------拆的太细,不支持

  优点:分别独立,维护起来方便

  缺点:有共通数据,比如登录页面胡起始地址,跨文件之间很难传输,需要写好几遍

3、3个文件,login.py有两个类,一个是正向类,一个是反向类

      signup.py文件

      order.py文件

4、一个正向文件

  一个反向文件

具体看需求,看使用方便

 

 6、输出测试报告1----HTMLTestRunner

 

 

 python所有的包安装方式:

  1、在线安装pip install 

  2、源码包安装:python setup.py install

  3、如果项目是一个很小的文件:直接放在python27根路径下或者Lib目录下

 

验证HTMLTestRunner.py安装成功   在run.py文件中import HTMLTestRunner---不支持中文   错误信息匀日志中查看,不要匀控制台查看
import unittest import HTMLTestRunner import time from cases.case01 import Case01 from cases.case02 import Case02 from cases.case03 import Case03 from cases.case04 import Case04 suite = unittest.TestSuite() suite.addTest(Case04('runTest')) suite.addTest(Case02('test')) suite.addTest(Case03('test'))
suite = unittest.defaultTestLoader.discover(start_dir="./cases/",pattern='case01*.py') fp = open("./report.html",'wb') HTMLTestRunner.HTMLTestRunner(stream=fp,title="XXXXX", description='11111').run(suite)
 
 
  生成测试报告样式 7、输出测试报告2----HTMLTestRunnerCN
import unittest import HTMLTestRunnerCN import time
from cases.case01 import Case01 from cases.case02 import Case02 from cases.case03 import Case03 from cases.case04 import Case04 suite = unittest.TestSuite() suite.addTest(Case04('runTest')) suite.addTest(Case02('test')) suite.addTest(Case03('test'))
suite = unittest.defaultTestLoader.discover(start_dir="./cases/",pattern='case01*.py') fp = open("./report.html",'wb')
HTMLTestRunnerCN.HTMLTestRunner(stream=fp, verbosity=1,title='慧测报告',description='123456',tester='袁路平').run(suite)
8、报告命名--用python时间戳time
#coding:utf-8 import time print time.time()---------------------------------------------------------时间戳 print time.ctime(time.time())---------------------------------------------美式时间格式化Wed Aug 08 00:25:43 2018 print time.ctime()--------------------------------------------------------Wed Aug 08 00:25:43 2018 print time.localtime(time.time())  #将秒数转化时间元组----------------------time.struct_time(tm_year=2018, tm_mon=8, tm_mday=8, tm_hour=0, tm_min=25, tm_sec=43, tm_wday=2, tm_yday=220, tm_isdst=0) print time.strftime('%Y_%m_%d %H:%M:%S',time.localtime(time.time()))------标准格式
 
import unittest import HTMLTestRunnerCN import time  
from cases.case01 import Case01 from cases.case02 import Case02 from cases.case03 import Case03 from cases.case04 import Case04 suite = unittest.TestSuite() suite.addTest(Case04('runTest')) suite.addTest(Case02('test')) suite.addTest(Case03('test'))
title=time.strftime('%Y %m %d-%H %M %S',time.localtime(time.time()))+'.html' fp = open("./"+title,'wb') HTMLTestRunnerCN.HTMLTestRunner(stream=fp, verbosity=1,title='慧测报告',description='123456',tester='袁路平').run(suite)
9、requests urllib模块:专门来处理http请求,用来模拟http客户端发送和接受请求----不讲解
DOS窗口安装requests pip install requests 或者源码安装:解压到某个路径下,文件中含有setup.py文件,DOS窗口执行-------python setup.py install
验证安装好方式:
import requests   引包成功即可
print requests.get('http://www.baidu.com').status_code----获取get请求百度首页状态码

 练习一:获取精品推荐区图片链接地址正确

首先编辑case04.py文件,获取图片链接地址返回码

#coding:utf-8 import unittest from selenium import webdriver import requests class Case04(unittest.TestCase):     '''检查首页精品推荐区域图片的有效性'''     def runTest(self):         driver = webdriver.Firefox()         driver.maximize_window()         driver.implicitly_wait(5)         driver.get('http://www.huicewang.com/ecshop/')         imgs = driver.find_elements_by_xpath("//div[@id='show_best_area']/div[@class='goodsItem']/a/img")         links = []         for img in imgs:             links.append(img.get_attribute('src'))  #将图片地址全部拿回来         for l in links:             if requests.get(l).status_code != 200:                 print l             else:                 print '链接正常'
run.py文件
suite = unittest.defaultTestLoader.discover(start_dir='./cases/', pattern='case04*.py')
filename = time.strftime('%Y%m%d_%H_%M_%S', time.localtime(time.time()))+'.html' fp = open('./'+filename, 'wb') HTMLTestRunnerCN.HTMLTestRunner(
stream=fp,title='慧测自动化测试报告',description='11111',tester='张三' ).run(suite)
 
driver跨方法使用,需要在第一个方法中将driver存放在类中,下面的函数才可以直接self.driver调用

缺少断言脚本

 

添加断言脚本 #coding:utf-8 #登录 from selenium import webdriver import time import unittest class Case01(unittest.TestCase):     '''测试的是登录,正向流程'''     def runTest(self):         '''11111111'''         driver = webdriver.Firefox()         self.driver = driver  #将driver存放在类中,那么driver跨方法也可以用         driver.maximize_window()         driver.implicitly_wait(5)         driver.get('http://www.huicewang.com/ecshop/user.php')         driver.find_element_by_name('username').send_keys('zach')         driver.find_element_by_name('password').send_keys('1234567')         driver.find_element_by_name('submit').click()         time.sleep(8)         try:             username = driver.find_element_by_xpath("//font[@id='ECS_MEMBERZONE']/font/font[@class='f4_b']").text         except:             username = ''         self.assertEqual(username, 'zach', '登录失败')  #Case01类调用了TestCase的assertEqual方法,所有要用self         print '登录成功'   #assertEqual断言成功时,打印“登录成功”     def tearDown(self):         self.driver.close()#已经在runTest函数中将driver存放在类中了,跨方法 或者:在runTest中全部使用self.driver
#coding:utf-8 #登录 from selenium import webdriver import time import unittest class Case01(unittest.TestCase):     '''测试的是登录,正向流程'''     def runTest(self):         '''11111111'''         driver = webdriver.Firefox()         self.driver = driver  #将driver存放在类中,那么driver跨方法也可以用         self.driver.maximize_window()         self.driver.implicitly_wait(5)         self.driver.get('http://www.huicewang.com/ecshop/user.php')         self.driver.find_element_by_name('username').send_keys('ylpaj')         self.driver.find_element_by_name('password').send_keys('ylpaj5211314')         self.driver.find_element_by_name('submit').click()         time.sleep(8)         try:             username = driver.find_element_by_xpath("//font[@id='ECS_MEMBERZONE']/font/font[@class='f4_b']").text         except:             username = ''         self.assertEqual(username, 'ylpaj', '登录失败')  #Case01类调用了TestCase的assertEqual方法,所有要用self         print '登录成功'     def tearDown(self):         self.driver.close()#已经在runTest函数中将driver存放在类中了,跨方法
 
 

转载于:https://www.cnblogs.com/ylpaj/p/9279441.html

你可能感兴趣的文章
jQuery最佳实践
查看>>
SELinux FAQ
查看>>
Java中synchronized同步的理解
查看>>
python 数值计算库
查看>>
java 服务重启 js 中被注释代码仍然执行
查看>>
我并不是不闻不问![C#]
查看>>
web前端经典小题
查看>>
AutoCAD如何倒角 倒圆角 倒直角
查看>>
Office PPT中如何插入flash
查看>>
C# Fade Form Effect With the AnimateWindow API Function
查看>>
golang多维数组的切片
查看>>
IP 网际协议
查看>>
C语言_第五章__实践(密码转换)
查看>>
docker 容器后台运行命令
查看>>
jquery 获取css position的值
查看>>
面向对象的程序设计
查看>>
a标签添加点击事件
查看>>
Context.startActivity出现AndroidRuntimeException
查看>>
Intellij idea创建javaWeb以及Servlet简单实现
查看>>
代理网站
查看>>