zoukankan      html  css  js  c++  java
  • 对于自动化测试框架的总结

    一.什么是自动化?

    就是借助工具(程序)的方式代替或取辅助手工测试,包括性能测试工具(jmeter)

    通工具记录或编写脚本的方式模拟手工测试的过程,通过回放或运行脚本来执行测试用例,从而代替人工对系统的功能进行验证。

    二.Web自动化测试

    什么是web自动化测试?

    就是网页自动化测试。通过软件对web对象进行输入数据,单击等操作,比较预结果和实际结果,包括测试报告。

    Web自动化测试工具

     Selenium可以说是测试WEB最全面的开源自动化工具,用 Python,Java,C#等编程语言进行构建。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。

     Webdriver是GOOGLE 正在用的自动化测试软件,基于Selenium的一个自动化测试类库。

     

    三.单元测试框架

    目前只学习了python这一种语言

    python常见单元测试框架包括unittest, pytest

    3.1unittest

         unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果。

      unittest是python内置库,不需要单独安装

    unittest有四个属性,分别如下:

    1.Test Case:测试用例

    2.TestSuite:创建测试套件的。

    3.TestRunner:测试的执行

    4.Test Fixture:搭建和销毁测试用例环境

    使用unittest编写用例,必须遵守以下规则:

      1.测试文件必须先import unittest
       2.测试类必须继承unittest.TestCase
       3.测试方法必须以“test_”开头

    断言:

    assertEqual、assertIn、assertTrue、assertFalse.

    参数化:

    unittest使用ddt数据驱动

    下面是用unittest框架执行web登录的测试案例代码,结合了日志:

     1 import unittest
     2 from selenium import webdriver
     3 from _ui.ceshikuangjai.PageObject import login_page
     4 from _ui.ceshikuangjai.PageObject import login_succes_page
     5 from _ui.ceshikuangjai.common.basic import Basic
     6 from ddt import ddt,data,unpack
     7 
     8 
     9 test_data=[('13384009455','123456','tang11')]
    10 test_data1=[('13384009455','546789','用户名或密码错误')]
    11 #测试用例
    12 #操作步骤,预期结果,实际结果
    13 @ddt
    14 class Test_Login(unittest.TestCase):
    15     def setUp(self):
    16         self.driver=webdriver.Chrome()
    17         self.driver.get('http://119.23.55.123:8084/fsmarket/user.php')
    18         self.log=Basic(self.driver).get_log()
    19     @data(*test_data)
    20     @unpack
    21     def test_login(self,uname,pwd,ex):
    22         self.log.info('开始进行登录界面的正常流测试')
    23         login_page.LoginPage( self.driver).login(uname,pwd)
    24         result = login_succes_page.NextPage(self.driver).check_uname()
    25         ex = ex
    26         assert result == ex
    27         if result==ex:
    28             self.log.info('预期结果{}与实际结果{}一致'.format(result,ex))
    29         else:
    30             print('预期结果{}与实际结果{}不一致'.format(result,ex))
    31 
    32     @data(*test_data1)
    33     @unpack
    34     def test_loginpwd_error(self,uname,pwd,ex):
    35         login_page.LoginPage(self.driver).login(uname,pwd)
    36         result=login_succes_page.NextPage(self.driver).cuowu()
    37         ex=ex
    38         assert result==ex
    39         if result==ex:
    40             print('预期结果{}与实际结果{}一致'.format(result,ex))
    41         else:
    42             print('预期结果{}与实际结果{}不一致'.format(result,ex))

    3.2pytest

    pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点:

            简单灵活,容易上手      

      支持参数化                     

      能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests)       

      pytest不是python内置库,需要单独安装

    pytest编写用例,必须遵守以下规则:

      1.测试文件名必须以“test_”开头或者"test"结尾(如:test_ab.py)
      2.测试方法必须以“test
    ”开头。
      3.测试类命名以"Test"开头。

    断言:

    直接使用assert 表达式

    参数化:

    使用@pytest.mark.parametrize装饰器

    下面是用pytest框架执行web登录的测试案例代码:

     1 import os
     2 from selenium import webdriver
     3 from py_kuangjia_test.ceshikuangjai.PageObject import login_page
     4 from py_kuangjia_test.ceshikuangjai.PageObject import login_succes_page
     5 import pytest
     6 
     7 testdata=[('13384009455','123456','tang11')]
     8 testdata1=[('13384009455','546789','用户名或密码错误')]
     9 #测试用例
    10 #操作步骤,预期结果,实际结果
    11 
    12 class Test_Login():
    13     @pytest.fixture()
    14     def setUp(self):
    15         self.driver = webdriver.Chrome()
    16         self.driver.get('http://119.23.55.123:8084/fsmarket/user.php')
    17         yield
    18     @pytest.mark.usefixtures('setUp')
    19     @pytest.mark.parametrize("uname,pwd,ex",testdata)
    20     def test_login(self,uname,pwd,ex):
    21         login_page.LoginPage(self.driver).login(uname,pwd)
    22         result = login_succes_page.NextPage(self.driver).check_uname()
    23         ex=ex
    24         try:
    25             assert result in ex
    26             print('预期结果{}与实际结果{}一致'.format(result,ex))
    27         except Exception:
    28             print('预期结果{}与实际结果{}不一致'.format(result,ex))
    29 
    30     @pytest.mark.usefixtures('setUp')
    31     @pytest.mark.parametrize("uname,pwd,ex", testdata1)
    32     def test_loginpwd_error(self,uname,pwd,ex):
    33         login_page.LoginPage(self.driver).login(uname,pwd)
    34         result=login_succes_page.NextPage(self.driver).cuowu()
    35         ex = ex
    36         assert result in ex
    37         try:
    38             assert result in ex
    39             print('预期结果{}与实际结果{}一致'.format(result, ex))
    40         except Exception:
    41             print('预期结果{}与实际结果{}不一致'.format(result, ex))
    42 
    43 if __name__ =="__main__":
    44     # 执行pytest单元测试,生成 Allure 报告需要的数据存在 report 目录
    45     pytest.main(['login_test.py','--alluredir',  '/report'])
    46     # 执行命令 allure generate ,生成测试报告
    47     os.system('allure generate report --clean')

    下面是我做的web的一些小的总结

    作者:小汤o

  • 相关阅读:
    阅读Unity官方技术blog笔记
    设计模式-具有Model-View-ViewModel设计模式的WPF应用
    关于PureMVC的一点想法
    管窥WOWUIInterface代码
    Lua 5.4引入的新变动
    Unity手册SpriteAtlasManager翻译
    2D向量的数学计算
    提前编译(AOT编译)Wiki翻译
    Lua5.3手册标准库拾遗
    C#异步语法糖的苦与甜
  • 原文地址:https://www.cnblogs.com/TH3499613196/p/13284086.html
Copyright © 2011-2022 走看看