selenium自动化封装函数,pom模式

自动化测试用例的设计

1,手工测试用例与自动化测试用例的对比
手工测试用例:1,较好的异常处理能力,通过人为的逻辑判断校验当前步骤的功能实现正确与否
    	   2,人工执行用例具有一定的步骤跳跃性
           3,人工测试步步跟踪,能够细致的定位问题
           4,手工测试用例主要用来发现功能缺陷
自动化测试用例:1,任何一个判断都需要编码
    		2,主要来保证产品主体功能正确完整和让测试人员从繁琐重复的工作中解脱出来
            3,目前自动化测试阶段定位在兼容性测试和回归测试.
2,自动化测试编写元则
  1),一个脚本是一个完整的场景
  2)一个脚本只验证一个功能点,验证的是最终结果
		断言:预期结果与实际结果的比较
  3)尽量只做功能中正向逻辑的验证
       正向逻辑不仅仅是正确的数据,还包括,错误的数据,
  4)脚本之间不要产生关联性--->每一个自动化测试脚本可以单独执行
  5)如果对数据进行了修改,需要对数据进行还原
  6),在整个脚本只对验证点做验证,不要对脚本的每个步骤做验证
    

python操作EXCL表格

1,导入xlrd---->如没有xlrd,需用pip install xlrd 下载这个包
2,操作EXCL表格
1)打开表格文件
  table=xlrd.open_workbook("表的路径名")
2)选择具体的一张表
   sheet=table.sheet_by_index(索引)#通过索引读取表格,索引从0开始
   sheet=table.sheet_by_name('表名')#通过表名字读取,名字必须和表的名字对应
3)读取表中的数据
  3.1读取行
    sheet.row_values(行号)#行号从0开始
  3.2 读取列
     sheet.col_values(列号)#列号从0开始
  3.3读取具体单元格
      sheet.cell_value(行号,列号)
  #补充:获取行数 print(sheet.nrows) 获取列数 print(sheet.ncols)
  3.4获取表中的总行数
    sheet.nrows
    zip函数,按对应值取元组
    例:a=[1,2,3]
       b=[4,5,6]
       data=zip(a,b)--->data=(1,4),(2,5),(3,6)#取出来的值为元组 
        元组转字典 dict(元组名)
3,Excel表格读取数据
 案例:
  import xlrd
#创建一个工具类操作Excel表格
class OperationExcel:
    def __init__(self,filename):
        #初始化每次传入的文件名
        #filename指文件路径+文件名
        self.table=xlrd.open_workbook(filename)
    def get_data_by_index(self,index=0):
        # 读取表中的数据
        sheet = self.table.sheet_by_index(index)#确定要读取的表
        keys = sheet.row_values(0)#读取键,即表头
        # 读取值
        num = sheet.nrows#确认行号
        cards=[]
        for i in range(1, num):#将行号一一遍历
            values = sheet.row_values(i)#根据行号取出每一行的值
            tmp=zip(keys,values)#将键值对已元组的形式取出
            cards.append(dict(tmp))#将元组转化成字典,再添加到提前准备好的列表中
        return cards#将数据返回

if __name__=='__main__':
    select = OperationExcel('E:\\web\\web自动化的封装\\log.xlsx')
    data=select.get_data_by_index()
    print(data)
4,处理数据
excel    python
1         str:字符串
2         int:整数
3         日期
4          布尔值

POM模式

思路:一个页面就是一个对象
把每个页面分为3:
    表现层:页面上可见的所有元素
    操作层:对页面上所有可见元素的操作(点击,清空,操作)
    业务层:对元素操作后所实现的功能
 文件结构:
 commmon:存放公共方法
 base.py ---对selenium做二次封装
       
  封装:打开浏览器
       打开网页
       元素定位
       元素操作
       关闭浏览器
       下拉菜单
       alert弹窗
       iframe
       工具类     
            
 page文件夹:一个页面就是一个py.文件
        如:login_page.py登录页面
            register_page.py 注册页面
 #重点:1page 类继承base类
      2,page 类中封装表现层,操作层,
         把页面分为3:
          表现层:页面上可见的元素
          操作层:对页面上可见元素的具体操作
          业务层:对表现层各个元素操作组合形成的业务
     	
    script 文件夹----存放所有的测试用例
      封装页面的业务层
       测试用例调用page文件夹中的类
    data存放测试数据
    report存放测试报告

unittest

unittest框架
1,python中的单元测试框架
2,unittest框架是用例编写和管理自动化测试用例
1,四个基本概念
test fixture 测试夹具 处理测试前的数据准备和测试后的数据清理
test suite   测试套件 批量收集需要执行的测试用例
test case    测试用例 核心部分,编写的测试用例要符合unittest框架的要求
test runner  测试执行 执行测试套件收集的测试用例
2,四个特殊的方法_test fixture
setUp 在一个py文件中,在测试用例执行之前先执行,有多少个测试用例,就执行多少次
tearDown 在一个py文件中,在测试用例执行后在执行,
setUpclass 在一个py文件中,在测试类执行之前执行
tearDownclass 在一个py文件中,在测试类执行之后执行

3,编写测试用例
1)导入unittest
2)创建测试类,测试类需要继承unittest.TestCase
  测试类,类名以Test开头,测试用例方法名称test开头,测试用例文件名称以test开头
 3)添加特殊方法(非必须)
4)编写测试用例(方法)
  测试用例名称必须以test开头
  测试用例执行顺序,安装测试用例名称在ASCII字符重点额排序来执行
5) 添加其他方法(非必须) 其他方法不会单独执行,如果在测试用例中存在调用,可以被执行

断言

,语法:
1,asserEqual(a,b,msg='当断言失败时输出')-->判断a和b是否相等,如果相等则断言成功,反之断言失败---用例执行失败  
2,asserTrue(x,msg="当断言失败时输出")
 当条件x为True,断言成功,反之,断言失败,测试用例失败

跳过

语法:
    @unittest.skip(reason="跳过测试") 无条件条过
    @unittest.skipIf(condition="跳过测试",reason="已经跳过") 当条件为真时跳过
    @unittest.skipUnless(condition="",reason="跳过测试")
    

测试套件

使用unittest.defaultTestLoader()
对测试用例的要求
建立测试用例专门存放的文件夹:
    测试用例文件的命名要求:
        
测试套件和测试执行
语法:
    测试套件 unittest.defaultTestLoader.discover()
    测试执行 unitest.TestRunner
    编写步骤:
        import unittest
        #添加测试存放路径
        case_dir="script"
        #将需要执行的测试用例添加到测试套件中
        discover=unittest.defaultTestLoader.discover(case_dir)
        #执行测试用例
        runner=unittest.TextTestRunner()
        runner.run(discover)

unittest 参数化,通过ddt模块实现参数化:
    		  1,准备测试数据
        	  2,在测试类前使用@ddt.ddt
              3,在测试用例前使用@ddt.data("数据源").def 后面传入data;或者 @ddt.unpack
                
                

测试报告

1,安装插件:复制HTMLTestRunnerPlugins.py文件到python安装目录下的Lib目录下
2,导入模块
3,确定测试用例存放路径
case_dir="./script"
4,确定测试报告存放路径
report_dir="./report"
5,命名测试报告的名,打开预定的测试报告,准备写入内容--->以当前时间命名测试报告
now=time.strftime('%Y-%m-%d %H_%M_%S')
report_name=now+"report.html"#测试报告的名称
with open(os.path.join(report_dir,report_name),'wb',) as fp:
6,将要执行的测试用例,放入测试套件中
discover=unittest.defaultTestLoader.discover(case_dir)
7,执行测试用例,并生成HTL格式的测试报告
  runner=HTMLTestRunnerPlugins.HTMLTestRunner(title="eshop测试报告",description="登录功能",stream=fp,verbosity=2)
    runner.run(discover)
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值