精华内容
下载资源
问答
  • 自己写自动化测试框架
    千次阅读
    2022-03-26 21:15:27

    本文介绍一个接口自动化测试框架。

    Python+unittest+requests

    实现结果:读取Excel接口测试用例并执行,输出测试报告。

    框架脑图

    如图,各个模块及作用如上。

    处理数据库

    db_funcs用来处理数据库,实现数据库数据的读取操作。(如果没有用到则不需要)

    import sqlite3
    from config.ProjectConfig import ETConfig
    from common.logger import write_log
    
    def execute_db(sql):
        """
        连接接口项目sqlite数据库,并执行sql语句
        :param sql: sql语句
        :return:
        """
        try:
            # 打开数据库连接
            conn = sqlite3.connect("{0}\\studentManagementSystem\\db.sqlite3".format(ETConfig.PROJECT_DIR))
            # 新建游标
            cursor = conn.cursor()
            # 执行sql
            cursor.execute(sql)
            # 获取执行结果
            result = cursor.fetchall()
            # 关闭游标、提交连接、关闭连接
            cursor.close()
            conn.commit()
            conn.close()
            return result
        except sqlite3.OperationalError as e:
            write_log.error("数据库连接,执行失败:{}".format(e))
    
    
    def init_db():
        """
        初始化数据库,删除掉departments的所有数据
        :return:
        """
        execute_db("delete from departments;")
    
    if __name__ == '__main__':
        init_db()

    处理Excel

    用来对写在Excel中的测试用例进行读取,和测试结果的写回。

    
    from openpyxl import load_workbook
    class DoExcel:
       """读写Excel文件"""
       def get_data(self,filename,sheetname):
        wb=load_workbook(filename)
        sheet=wb[sheetname]
    
        test_data=[]
        #读取Excel数据存入列表
        for i in range(2,sheet.max_row+1):
            row_data={}
            row_data['case_id'] = sheet.cell(i, 1).value #第一列为case_id
            row_data['module']=sheet.cell(i,2).value
            row_data['title']=sheet.cell(i,3).value
            row_data['headers'] = sheet.cell(i, 4).value
            row_data['Cookie']=sheet.cell(i,5).value
            row_data['method'] = sheet.cell(i, 6).value
            row_data['url'] = sheet.cell(i, 7).value
            row_data['data'] = sheet.cell(i,8).value
            row_data['expected_code'] = sheet.cell(i, 9).value #预期状态码
            row_data['actual_code'] = sheet.cell(i, 10).value #实际状态码
            row_data['response']=sheet.cell(i,11).value
            row_data['auth']=sheet.cell(i,13).value
            row_data['file']=sheet.cell(i,14).value
    
            test_data.append((row_data))
        return test_data
       #写入Excel方法
       def write_back(self,filename,sheet_name,i,k,value):
           #i为写入的行k为写入的列
            wb=load_workbook(filename)
            sheet=wb[sheet_name]
            sheet.cell(i,k).value=value#写入表格第14列
            wb.save(filename)
    
    if __name__ == '__main__':
        test_data=DoExcel().get_data("D:/接口实战/接口自动化用例.xlsx",'storm')
        # print(test_data)
        DoExcel().write_back("D:/接口实战/接口自动化用例.xlsx",'storm',2,5)
    
    

    封装请求方法

    对请求方法进行封装,通过传入的方法,来调用对于的request方法

    #封装请求,让代码更简洁,更具有可读性,并且更好维护
    import requests
    from  common.logger import write_log
    class HttpReq(object):
        """利用requests封装get请求和post请求需要传递的参数"""
        def __init__(self):
            self.headers = {"Content-Type": "application/json",
                            # "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36" 伪装user-agent
                            }
    
        @staticmethod
        def http_request(url,data, http_method, headers=None, cookies=None, auth=None, file=None):
            try:
                if http_method.upper() == "GET":
                    res = requests.get(url, data=data, headers=headers, cookies=cookies, auth=auth, files=file)
                    return res
                elif http_method.upper() == "POST":
                    res = requests.post(url, data=data, headers=headers, cookies=cookies, auth=auth, files=file)
                    return res
                else:
                    # print("输入的请求方法不对")
                    write_log.info("输入的请求方法不对")
    
            except Exception as e:
                # print("请求报错了:{0}".format(e))
                write_log.error("请求报错了:{0}".format(e))
                raise e
    
    
    ETReq = HttpReq()
    

    日志模块

    本模块用来生成执行测试用例时产生的日志

    import logging
    import os
    from logging import handlers
    from config.ProjectConfig import ETConfig
    
    def logger():
        # os.makedirs("{}logs".format(ETConfig.Log_DIR), exist_ok=True)#os.makedirs() 方法用于递归创建目录。
        log = logging.getLogger("{}\\et.log".format(ETConfig.Log_DIR))
        format_str = logging.Formatter('%(asctime)s [%(module)s] %(levelname)s [%(lineno)d] %(message)s', '%Y-%m-%d %H:%M:%S')
        # 按天录入日志,最多保存7天的日志
        handler = handlers.TimedRotatingFileHandler(filename=("{}/et.log".format(ETConfig.Log_DIR)), when='D', backupCount=7, encoding='utf-8')
        log.addHandler(handler)
        log.setLevel(logging.INFO)
        handler.setFormatter(format_str)
        return log
    
    write_log = logger()
    write_log.info("你好")

    发送邮件

    本模块实现发送邮件功能,通过附件将html报告发送给对应的邮箱。

    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from config.ProjectConfig import ETConfig
    from common.logger import write_log
    import smtplib
    import time
    class sendEmail:
    
        # 发送邮件函数
        def send_mail(self):
    
            """
            发送邮件
            :return:
            """
            # 打开报告文件
            # 邮箱信息
            self.smtpserver = ETConfig.EMAIL_CONFIG['EMAIL_SERVER']
            self.user = ETConfig.EMAIL_CONFIG['EMAIL_USER']
            self.password = ETConfig.EMAIL_CONFIG['EMAIL_PWD']
            self.sender = ETConfig.EMAIL_CONFIG['EMAIL_SENDER']
            self.receiver = ETConfig.EMAIL_CONFIG['EMAIL_RECEIVER']
            self.report_dir=ETConfig.Report_DIR
            # # html报告路径
            # self.report_dir = "{}report".format((ETConfig.Report_DIR))
            with open('{}\\et_result.html'.format(self.report_dir), 'rb') as f:
                mail_body = str(f.read(), encoding="utf-8")
    
            msg = MIMEMultipart('mixed')
            msg_html = MIMEText(mail_body, 'html', 'utf-8')
            msg_html["Content-Disposition"] = 'attachment; filename="TestReport.html"'
            msg.attach(msg_html)
            msg_html1 = MIMEText(mail_body, 'html', 'utf-8')
            msg.attach(msg_html1)#附件
    
            msg['Subject'] = u'自动化测试报告 {}'.format(time.strftime("%Y-%m-%d", time.localtime()))
            msg['From'] = u'AutoTest <%s>' % self.sender
            msg['To'] = self.receiver
            # msg['Cc'] = self.cc
    
            try:
                smtp = smtplib.SMTP()
                smtp.connect(self.smtpserver)
                smtp.login(self.user, self.password)
                smtp.sendmail(self.sender, self.receiver, msg.as_string())
                smtp.quit()
                write_log.info("发送邮件成功!")
            except Exception as e:
                write_log.error("发送邮件失败:{}".format(e))

    封装配置

    ProjectConfig.py用来对项目用到的配置进行进行封装。

    import os
    class ProjectConfig(object):
    #封装配置
        version="v1.0"
        url="XXX"
    # 替换为你本地的接口项目路径(注意不是自动化项目路径)
        PROJECT_DIR = "C:\\Users\\010702\\PycharmProjects\\easytest\\接口环境\\"
        # 自动化测试项目目录
        TEST_DIR = "D:\APItest"
        Log_DIR="D:\\APItest\\log"
        Report_DIR="D:\\APItest\\report"
    #邮件配置信息
        EMAIL_CONFIG={"EMAIL_SERVER":"smtp.qq.com",#服务器
                      "EMAIL_USER":"XXX",
                      "EMAIL_PWD":"XXXXXXmdhje",#授权码
                      "EMAIL_SENDER":"XXX",
                      "EMAIL_RECEIVER":"XXX"
                      }
    ETConfig=ProjectConfig()
    
    
    

    测试用例模块

    getUserStorm.py测试用例文件。

    
    #storm项目获取用户信息 DDT+Excel Excel有几条数据,就执行几次用例
    import unittest
    import requests
    import json
    from config.ProjectConfig import ETConfig
    from testcase.data.DepartmentData import ADD_DATA
    from ddt import ddt,data,unpack
    from common.wrapers import *
    #这里竟然可以只导入一个对象
    from common.HttpReq import ETReq
    from common.doExcel import DoExcel
    from common.HttpReq import HttpReq
    from common.is_json import IsJson
    from common.logger import write_log
    import warnings
    @ddt
    class GetUserTest(unittest.TestCase):
        test_data = DoExcel().get_data("D:/接口实战/接口自动化用例.xlsx", 'getuser')
        #只要哪一行有值,就会被读为一条用例
        @classmethod
        def setUpClass(cls):
           write_log.info("------------------")
        """获取用户信息"""
        def setUp(self):
            warnings.simplefilter('ignore',ResourceWarning)
        def tearDown(self):
            pass
    
        @write_case_log()
        @data(*test_data)
        def test_get_user_info(self,item):
            print("正在执行测试用例{0}".format(item['title']))
            r=HttpReq().http_request(url=item['url'],data=(item['data']),http_method=item['method'])
    
            # print("响应文本为:"+r.text)
            try:
    
                self.assertEqual(item['expected_code'], r.json()['code'])  # 预期结果和直接返回的状态码比较
                TestResult='PASS'
                # print("测试用例执行成功")
                write_log.info("测试用例执行成功")
            except AssertionError as e:
                TestResult='FAIL'
                # print("执行用例出错(0)".format(e))
                write_log.error("执行用例出错{0}".format(e))
    
                raise e
            finally:
                DoExcel().write_back("D:/接口实战/接口自动化用例.xlsx", 'getuser',item['case_id']+1,10,r.json()['code'])
                DoExcel().write_back("D:/接口实战/接口自动化用例.xlsx", 'getuser',item['case_id']+1,11,r.text)
                DoExcel().write_back("D:/接口实战/接口自动化用例.xlsx", 'getuser',item['case_id']+1,12,TestResult)#写入结果
    
    
            # r=IsJson(r)
            # self.assertEqual(item['expected'],r['code'])#结果和响应结果中的code边角
    
    
    
    
    if __name__ == '__main__':
        # unittest.main()
        suite=unittest.TestSuite()
        suite.addTest(GetUserTest("test_get_user_info"))
        # suite.addTest(AddDepartmentTest("test_add_department_2"))
        runner=unittest.TextTestResult()
        test_result=runner.run(suite)
    
    
    
    
    
    

    执行用例

    run.py用来执行用例,并生成测试报告。

    import unittest
    import platform
    import os.path
    from common.logger import write_log
    from config.ProjectConfig import ETConfig
    from common.HTMLTestRunnerCNs import HTMLTestRunner
    from common.send_email import sendEmail
    class RunCase(object):
        report_dir=ETConfig.Report_DIR
        #执行用例函数
        def run_case(self):
            # 运行测试用例并生成html测试报告
            with open('{}//et_result.html'.format(self.report_dir), 'wb') as fp:
    
                try:
                    write_log.info("RunCase执行用例--开始")
                    suite = unittest.TestSuite()
                    tests = unittest.defaultTestLoader.discover('..\\testcase', pattern='*Storm.py')
                    suite.addTest(tests)
                    runner = HTMLTestRunner(stream=fp, title=u'自动化测试报告', description=u'运行环境:{}'.format(platform.platform()),
                                            tester="istester")
                    runner.run(suite)
                    write_log.info("RunCase执行用例--结束")
                except Exception as e:
                    write_log.error("RunCase执行用例,生成报告失败:{}".format(e))
    
    
    if __name__ == '__main__':
        test = RunCase()#创建对象
        test.run_case()#调用测试用例执行函数
        sendEmail().send_mail()
        #调用发送邮件函数
    
    

    测试报告

    源码:https://github.com/2504973175/API_test.git

    更多相关内容
  • WebWEB自己动手Web自动化测试框架6-自动化测试框架的规划软件测试从今天开始,我们正式进入自动化测试框架的编写中。首先我们先进行需求分析:我们到底要什么样的自动化测试框架?正如第一篇《自己动手Web自动化...
  • Robot Framework 自动化测试框架

    万人学习 2019-11-29 14:57:20
    Robot Framework 自动化测试框架,包括接口测试、数据库测试、Web测试、App测试。
  • 自动化测试框架总结

    万次阅读 多人点赞 2021-12-26 15:05:36
    2. Web自动化测试框架 3. iOS自动化测试框架 4. Android自动化测试框架 1. 单元测试框架 几乎所有的主流语言,都会有其对应的单元测试框架,下面简单介绍一下python,java,C#三种语言的常见单元测试框架 1.1 ...

    目录

     1. 单元测试框架

    2. Web自动化测试框架

    3. iOS自动化测试框架

    4. Android自动化测试框架

     1. 单元测试框架

    几乎所有的主流语言,都会有其对应的单元测试框架,下面简单介绍一下python,java,C#三种语言的常见单元测试框架

    1.1 Python

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

    1.1.1 unittest

    • unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果。
    • unittest为python内置库,不需要单独安装(好像也和版本有关系)

    1.1.2 pytest

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

    • 简单灵活,容易上手
    • 支持参数化
    • 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests)
    • pytest不是python内置库,需要单独安装

    1.1.3 unittest与pytest对比

    • unittest提供了test cases、test suites、test fixtures、test runner相关的类,让测试更加明确、方便、可控。使用unittest编写用例,必须遵守以下规则:

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

    • pytest是python的第三方测试框架,是基于unittest的扩展框架,比unittest更简洁,更高效。使用pytest编写用例,必须遵守以下规则:

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

    • unittest提供了setUp/tearDown,只能针对所有用例。
    • pytest提供了模块级、函数级、类级、方法级的setup/teardown,比unittest的setUp/tearDown更灵活。

    模块级(setup_module/teardown_module)开始于模块始末,全局的
    函数级(setup_function/teardown_function)只对函数用例生效(不在类中)
    类级(setup_class/teardown_class)只在类中前后运行一次(在类中)
    方法级(setup_method/teardown_method)开始于方法始末(在类中)
    类里面的(setup/teardown)运行在调用方法的前后

    • pytest还可以在函数前加@pytest.fixture()装饰器,在测试用例中装在fixture函数。fixture的使用范围可以是function,module,class,session。
    • fixture相对于setup和teardown来说有以下几点优势:

    (1)命名方式灵活,不局限于setup和teardown这几个命名
    (2)conftest.py 配置里可以实现数据共享,不需要import就能自动找到一些配置,可供多个py文件调用。
    (3)scope="module" 可以实现多个.py跨文件共享前置
    (4)scope="session" 以实现多个.py跨文件使用一个session来完成多个用例
    (5)用yield来唤醒teardown的执行

    • 断言方面:
      unittest提供了assertEqual、assertIn、assertTrue、assertFalse.
      pytest直接使用assert 表达式,相对而言更简单且高效.

    • unittest不支持失败重跑,pytest支持

    • unittest依赖ddt库参数化,pytest直接使用@pytest.mark.parametrize装饰器

    pytest总的来说优于unittest,提供了更多的功能和可拓展性

    1.2 Java

    Java常见单元测试框架包括Junit、testNG

    1.3 C#

    C#常见单元测试框架包括NUnit

    2. Web自动化测试框架

    2.1 Selenium

    Selenium是一个用于Web应用程序测试的工具。支持的浏览器包括IE、Mozilla Firefox、Mozilla Suite等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。Selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。Selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。

    selenium 1.0 包括以下两部分:selenium server、 Client Libraries组成

    2.1.1 selenium server

    selenium server负责控制浏览器的行为。主要有launcher,Http Proxy,selenium core。selenium core使用Selenium Server嵌入到浏览器页面中。实质上,selenium core是由JS函数组成,这样我们可以实现用程序对浏览器进行操作。

    2.1.2 client Libraries

    编写测试用例时控制selenium server的库

    下图介绍了testcase的执行过程:

     

    执行过程

    (1).测试案例(Testcase)通过Client Lib的接口向Selenium Server发送Http请求,要求和Selenium Server建立连接。

    为什么要通过发送Http请求控制Selenium Server而不采用其他方式呢?从上文可以看出,Selenium Server是一个独立的中间服务器(确切地说是代理服务器),它可以架设在其他机器上!所以测试案例通过发送HTTP请求去控制Selenium Server是很正常的。

    (2).Selenium Server的Launcher启动浏览器,把Selenium Core加载入浏览器页面当中,并把浏览器的代理设置为Selenium Server的Http Proxy。

    (3).测试案例通过Client Lib的接口向Selenium Server发送Http请求,Selenium Server对请求进行解析,然后通过Http Proxy发送JS命令通知Selenium Core执行操作浏览器的动作。

    (4).Selenium Core接收到指令后,执行操作。

    (5).浏览器收到新的页面请求信息(因为在(4)中,Selenium Core的操作可能引发新的页面请求),于是发送Http请求,请求新的<u style="box-sizing: border-box; font-family: __SYMBOL, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", SimSun, sans-serif; font-variant-ligatures: none; font-variant-numeric: tabular-nums; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);">Web</u>页面。

    由于Selenium Server在启动浏览器时做了手脚,所以Selenium Server会接收到所有由它启动的浏览器发送的请求。

    (6).Selenium Server接收到浏览器的发送的Http请求后,自己重组Http请求,获取对应的Web页面。

    (7).Selenium Server的Http Proxy把接收的Web页面返回给浏览器。

    2.2 Selenium2(Webdriver)

    Selenium 2将浏览器原生的API封装成WebDriver API,可以直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件,配置证书之类的),所以就像真正的用户在操作一样。

    下图介绍了Selenium2的架构:

     

    Selenium2架构

    • webdriver按照server–client的经典设计模式设计

    • server端就是remote server,可以是任意的浏览器:我们的脚本启动浏览器后,该浏览器就是remote server,它的职责就是等待client发送请求并做出相应;

    • client端简单说来就是我们的测试代码:们测试代码中的一些行为,比如打开浏览器,转跳到特定的url等操作是以http请求的方式发送给被server端(也就是被测浏览器)server接受请求,并执行相应操作,并在response中返回执行状态、返回值等信息;

    • the WebDriver Wire Protocol是Selenium自己设计定义的协议,这套协议非常之强大,几乎可以操作浏览器做任何事情,包括打开、关闭、最大化、最小化、元素定位、元素点击、上传文件等。

    • WebDriver Wire协议是通用的,也就是说不管FirefoxDriver还是ChromeDriver,启动之后都会在某一个端口启动基于这套协议的Web Service,例如FirefoxDriver初始化成功,默认从http://localhost:7055开始,IE则是http://localhost:52432

    webdriver的工作原理:

    (1)启动浏览器后,selenium-webdriver会将目标浏览器绑定到特定的端口,启动后的浏览器则作为webdriver的remote server。

    (2)客户端(也就是测试脚本),借助ComandExecutor发送HTTP请求给sever端(通信协议:The WebDriver Wire Protocol,在HTTP request的body中,会以WebDriver Wire协议规定的JSON格式的字符串来告诉Selenium我们希望浏览器接下来做什么事情)。

    (3)Sever端需要依赖原生的浏览器组件,转化Web Service的命令为浏览器native的调用来完成操作。

    3. iOS自动化测试框架

    3.1 XCTest

    About Testing with Xcode

    XCTest是苹果在iOS 7和Xcode5引入的一个简单而强大的测试框架,它的测试编写起来非常简单,并且遵循xUnit风格。XCTest的优点是与Xcode深度集成,有专门的Test导航栏,但因为受限于官方测试API,因此功能不是很丰富。

    3.2 UIAutomation

    https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/UIAutomation.html

    UIAutomation是苹果提供的UI自动化测试框架,使用Javascript编写。基于UIAutomation有扩展型的工具框架和驱动型的框架。扩展型框架以JavaScript扩展库方法提供了很多好用js工具,注入式的框架通常会提供一些Lib或者是Framework,要求测试人员在待测应用的代码工程中导入这些内容,框架可以通过他们完成对app的驱动。驱动型UI Automation 在自动化测试底层使用了UI Automation库,通过TCP通信的方式驱动UI Automation来完成自动化测试,通过这种方式,编辑脚本的语言不再局限于JavaScript。

    3.3 Frank

    App Development Ireland - App Developers Dublin

    Frank是iOS平台一款非常受欢迎的app测试框架,它使用Cucumber语言来编写测试用例, Frank包含一个强大的“app inspector”–Symbiote,可以用它来获得运行中app的详细信息,便于开发者将来进行测试回顾。 它允许使用Cucumber编写结构化英语句子的测试场景。 Frank要求测试时在应用程序内部编译,这意味着对源代码的改变是强制性的。操作方式为使用Cucumber和JSON组合命令,将命令发送到在本地应用程序内部运行的服务器上,并利用UISpec运行命令。

    **优点: **测试场景是在Cucumber的帮助下,用可理解的英语句子写的。强大的Symbiote实时检查工具。 活跃的社区支持。 不断扩大中的库。

    缺点:对手势的支持有限。 在设备上运行测试有点难。 修改配置文件需要在实际设备上运行。 记录功能不可用。

    3.4 KIF

    iOS 中使用 KIF 测试 UI - OSCHINA - 中文开源技术交流社区

    KIF是Keep It Functional项目的缩写,是一款iOS app功能性测试框架,使用Objective-C语言编写,对苹果开发者来说非常容易上手,更是一款开发者广为推荐的测试工具。KIF tester使用私有API来了解App中的视图层级。但缺点是运行较慢。

    3.5 Calabash-ios

    详见Calabash-android 描述。

    3.6 Subliminal

    Subliminal

    Subliminal是另一款与XCTest集成的框架。与KIF不同的是,它基于UIAutomation编写,旨在对开发者隐藏UIAutomation中一些复杂的细节。

    3.7 Kiwi

    https://github.com/kiwi-bdd/Kiwi/wiki/Getting-Started-with-Kiwi-2.0

    Kiwi是对XCTest的一个完整替代,使用xSpec风格编写测试。 Kiwi带有自己的一套工具集,包括expectations、mocks、stubs,甚至还支持异步测试。它是一个适用于iOS 开发的Behavior Driven Development(BDD)库,优点在于其简洁的接口和可用性,易于设置和使用,非常适合新手开发者。Kiwi使用Objective-C语言编写,易于IOS开发人员上手。

    3.8 Appium

    Appium: Mobile App Automation Made Awesome.

    Appium是一个开源的、跨平台的自动化测试工具,支持IOS、Android和FirefoxOS平台。 通过Appium,开发者无需重新编译app或者做任何调整,就可以测试移动应用,可以使测试代码访问后端API和数据库。它是通过驱动苹果的UIAutomation和Android的UiAutomator框架来实现的双平台支持,同时绑定了Selenium WebDriver用于老的Android平台测试。开发者可以使用WebDriver兼容的任何语言编写测试脚本,如Java, OC, JS, PHP,Python, Ruby, C#,Clojure 和Perl语言。

    总结:IOS自动化测试框架继承关系如下. XCTest与 Xcode 的 IDE 直接集成,使用简单, 但其不支持stub和mock, 所以单使用XCTest框架的较少. Kiwi是一个iOS平台十分好用的行为驱动开发BDD的测试框架,有着非常漂亮的语法,可以写出结构性强,非常容易读懂的测试。UI Automation是Apple官方提供的UI自动化测试的解决方法,但接口不够丰富。

     

     iOS自动化测试框架

    • KIF、Frank、Calabash都是通过使用代码的形式来模拟事件触发,使得被测代码就像是由用户行为所触发的一样。但这样的代价是插入一个额外层的复杂度。

    • IOS测试框架中支持BDD的有calabash 和Kiwi。

    • 可选用的单元测试框架有Kiwi,Specta,Quick等,而KIF,Subliminal和calabash更适用于UI级验收测试。

    4. Android自动化测试框架

    4.1 Instrumentation

    https://developer.android.com/reference/android/app/Instrumentation.html

    Instrumentaion 是Android自带的一个测试框架,是很多其它测试框架的基础,可以在同进程中加载被测组件。它有很多丰富的高层封装,使用者可以使用基于instrumentation的其他框架,避免过多二次开发量。但Instrumentation不支持跨应用,导致基于instrumentation的框架都继承了这个缺点。

    4.2 Robotium

    https://github.com/robotiumtech/robotium

    Robotium是基于Instrumentation框架开发的一个更强的框架. 对常用的操作进行了易用性的封装. 用于开发功能性、系统和验收测试场景。它运行时绑定到GUI组件。它安装了一个测试用例套件作为在Android设备或仿真器上的应用程序,并提供用于执行测试的真实环境。

    优点: 容易在最短的时间内编写测试脚本,易用性高。自动跟随当前activity。 由于运行时绑定到GUI组件,所以相比Appium,它的测试执行更快,更强大。 不访问代码或不了解app实现,也可以工作。 支持Activities、Dialogs、Toasts、Menus、Context Menus和其他Android SDK控件。

    缺点: 不能处理flash和web组件。在旧设备上会变得很慢。 由于不支持iOS设备,当自动化测试同时覆盖 android与iOS的情况时,测试会被中断。没有内置的记录和回放功能.,使用记录功能需要 TestDroid 和 Robotium Recorder 这样的收费工具。

    4.3 UIAutomator

    https://google.github.io/android-testing-support-library/docs/uiautomator/

    UIAutomator是由谷歌提供的测试框架,它提供了原生Android app和游戏的高级UI测试。这是一个包含API的Java库,用来创建功能性UI测试,还有运行测试的执行引擎。该库自带Android SDK。

    优点:它在运行访问不同的进程时,会给JUnit测试案例特权。库由谷歌社区支持和维护。

    缺点:仅支持android4.1(API level 16)及以上。 不支持脚本记录。 支持的重点是Java。 你不能获得当前活动或仪表化。目前不支持web视图。 库仅支持使用Java,因此很难和使用Ruby的cucumber混合。如想支持BDD框架,建议使用Java自己的BDD框架,例如Jbehave。

    4.4 Espresso

    https://google.github.io/android-testing-support-library/docs/espresso/index.html

    Espresso是Google的开源自动化测试框架。相对于Robotium和UIAutomator,它的特点是规模更小、更简洁、API更加精确、编写测试代码简单、容易快速上手。因为是基于Instrumentation的,所以不能跨App。

    4.5 Calabash

    https://github.com/calabash

    Calabash是一个适用于iOS和Android开发者的跨平台app测试框架,可用来测试屏幕截图、手势和实际功能代码。Calabash开源免费并支持Cucumber语言,Cucumber能让你用自然的英语语言表述app的行为,实现BDD(Behavior Driven Development,行为驱动开发)。 Cucumber中的所有语句使用Ruby定义。

    **优点: **有大型社区支持。列表项 简单,类似英语表述的测试语句支持在屏幕上的所有动作,如滑动,缩放,旋转,敲击等。 跨平台开发支持(同样的代码在Android和iOS设备中都适用)。

    缺点:测试步骤失败后,将跳过所有的后续步骤,这可能会导致错过更严重的产品问题。测试耗费时间,因为它总是默认先安装app。 需要Calabash框架安装在ios的ipa文件中, 因此测试人员必须要有iOS的app源码。 除了Ruby,对其他语言不友好。

    4.6 Appium

    Appium: Mobile App Automation Made Awesome.

    Appium是一个开源的、跨平台的自动化测试工具,支持IOS、Android和FirefoxOS平台。 通过Appium,开发者无需重新编译app或者做任何调整,就可以测试移动应用,可以使测试代码访问后端API和数据库。它是通过驱动苹果的UIAutomation和Android的UiAutomator框架来实现的双平台支持,同时绑定了Selenium WebDriver用于老的Android平台测试。开发者可以使用WebDriver兼容的任何语言编写测试脚本,如Java, OC, JS, PHP,Python, Ruby, C#,Clojure 和Perl语言。

    4.7 Selendroid

    GitBook - Where software teams break knowledge silos.

    Selendroid 是一个基于Instrumentation的一个框架. 完全兼容Webdriver协议。 Selendroid 可以在模拟器和实际设备上使用,也可以集成网格节点作为缩放和并行测试。

    4.8 Robolectric

    Robolectric

    Robolectric 是一款Android单元测试框架,但它并不依赖于Android提供的测试功能,它通过实现一套JVM能运行的Android代码,然后在unit test运行的时候去截取android相关的代码调用,然后转到Robolectric实现的代码(shadow objects)去执行这个调用的过程。因此它不像模拟器或设备需要dexing(Android dex编译器将类文件编译成Android设备上的Dalvik VM使用的格式)、打包、部署和运行的过程,大大减少了测试执行的时间。Pivotal实验室声称使用Robolectric可以在28秒内运行1047个测试。

    除了实现Android里面的类的现有接口,Robolectric还给每个Shadow类额外增加了很多接口,可以读取对应的Android类的一些状态。比如它为ImageView提供了getImageResourceId()方法,测试者可以通过getImageResourceId()接口来确定是不是正确显示了期望的Image。

    4.9 RoboSpock

    http://robospock.org/

    RoboSpock是一个开源的Android测试框架,它提供了简单的编写BDD行为驱动开发规范的方法,使用Groovy语言,支持Google Guice库。RoboSpock合并了Robolectic和Spock的功能。

    4.10 Cafe

    项目管理iCafe_项目进度管理-百度智能云

    Cafe是百度出品的一个基于Robotium的测试框架,它提供了跨进程的测试解决方案。

    4.11 Athrun

    http://code.taobao.org/p/athrun/wiki/index/

    Athrun 是taobao出的一个移动测试框架,它支持Android和IOS。Android部分是基于Instrumentation,在Android原有的ActivityInstrumentationTestCase2类基础上进行了扩展,提供了一整套面向对象的API。 IOS上的自动化测试包括注入式自动化框架AppFramework,和基于录制的自动化框架Athrun_IOS, InstrumentDriver。

    4.12 其他

    其他自动化框架还有应用于稳定性测试的Monkey系列(Monkey, Monkeyrunner, MonkeyTalk), 其中MonkeyTalk 支持iOS 和 Android,它可以为应用进行真实的,功能性交互测试。MonkeyTalk 提供简单的 “smoke tests”,复杂数据驱动的测试套件。MonkeyTalk 支持原生,移动和混合应用,真实设备或者模拟器。MonkeyTalk 使得场景捕获非常容易,可以记录高级别,可读的测试脚本。还有适用于浏览器自动测试的Selenium WebDriver,可以真实测试用户行为,用户交互如触摸、手指滚动、长按等,还支持HTML5的一些特性,比如本地存储、session存储、应用缓存等。而CTS则是应用于兼容性测试的自动化工具, CTS大部分是基于Junit和仪表盘技术编写的。还扩展了自动化测试过程,可以自动执行用例,自动收集和汇总测试结果。CTS采用XML配置文件的方式将这些测试用例分组成多个测试计划(plan),第三方也可以创建自己的plan。

    总结:

    各个测试框架的继承关系如下,继承关系决定了有些框架的先天优势或先天不足. 在实际应用中可以集成多个框架。

     

     Android 自动化测试框架

    • 基于Instrumentation的测试框架,比如Espresso,Robotium,Selendroid等,都不能支持跨APP使用。 如自动化测试中有跨APP操作,可以结合UiAutomator实现。

    • 支持BDD的自动化框架比较少,可以在calabash 和 RoboSpock及Jbehave之间选择。

    • 若想同时支持Android和IOS,可选框架有Appium和Calabash,或AthRun。

    • 若为单元测试选择框架,可选Instrumentation或Robolectric。Robolectric实现了shadow object 类,耗时短。

    感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接免费拿走:

    ① 2000多本软件测试电子书(主流和经典的书籍应该都有了)

    ② 软件测试/自动化测试标准库资料(最全中文版)

    ③ 项目源码(四五十个有趣且经典的练手项目及源码)

    ④ Python编程语言、API接口自动化测试、web自动化测试、App自动化测试(适合小白学习)


    ⑤ Python学习路线图(告别不入流的学习)

    上图的资料 在我的QQ技术交流群里(技术交流和资源共享,广告进来腿给你打断)

    可以自助拿走,群号953306497(备注“csdn111”)群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。

    展开全文
  • Pytest是Python最强大的自大化测试框架,本资料内容详细介绍pytest使用方法,基于Python3.6,python零基础勿扰,selenium零基础勿扰
  • 在开始学习python自动化测试之前,先了解目前市场上的自动化测试框架有哪些? 随着技术的不断迭代更新,优胜劣汰也同样发展下来。从一开始工具型自动化,到现在的框架型;从一开始的能用,到现在的不仅能用,还需要...

    在开始学习python自动化测试之前,先了解目前市场上的自动化测试框架有哪些?

    随着技术的不断迭代更新,优胜劣汰也同样发展下来。从一开始工具型自动化,到现在的框架型;从一开始的能用,到现在的不仅能用,还需要支持可拓展,支持多语言等等…以下框架可以提供学习,排名不分先后。

    Selenium
    
    Github Start : 20.8K
    

    在这里插入图片描述

    凡是学过或者正在学,亦或者准备学的同学,都应该知道selenium这个测试框架了。这是目前市场应用最广,发展最快的测试框架。

    Selenium的工作原理是通过使用特定于每种语言的驱动程序支持各种编程语言。

    Selenium支持的语言包括C#,Java,Perl,PHP,Python和Ruby。目前,Selenium Web驱动程序最受Python和C#欢迎。Selenium测试脚本可以使用任何支持的编程语言进行编码,并且可以直接在大多数现代Web浏览器中运行。Selenium支持的浏览器包括Internet Explorer,Mozilla Firefox,Google Chrome和Safari。

    Selenium是一套web的测试框架,所以无法在客户端以及桌面端的应用中使用。

    如果对python自动化测试、web自动化、接口自动化、移动端自动化、面试经验交流等等感兴趣的测试人,可以 点这自行获取…

    Appium
    
    Github Start : 13.6K
    

    图片

    Appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,移动web 应用和混合应用。

    “移动原生应用”是指那些用 iOS 或者 Android SDK 写的应用。

    “移动 web 应用”是指使用移动浏览器访问的应用(Appium 支持 iOS 上的 Safari 和 Android 上的 Chrome)。

    “混合应用”是指原生代码封装网页视图——原生代码和 web 内容交互。

    重要的是,Appium 是一个跨平台的工具:它允许测试人员在不同的平台(iOS,Android)使用同一套API来写自动化测试脚本,这样大大增加了 iOS 和 Android 测试套件间代码的复用性。

    如果对python自动化测试、web自动化、接口自动化、移动端自动化、面试经验交流等等感兴趣的测试人,可以 点这自行获取…

    Cypress
    
    Github Start : 30.7K
    

    在这里插入图片描述

    Cypress是什么,可能很多国内的测试同学都很少有听闻,但是在github上面高达30K的start,说明市场对这个框架的认可程度了。这是一款web应用的E2E测试框架,通过js语言编写的。

    这个框架与selenium最大的区别就是,不需要下载驱动。Cypress集成了浏览器驱动,在使用他的时候,只需要下载安装即可。正如官网所说的,开箱即用。

    这么强大的框架,是不是什么程度都可以用呢?答案,不是。

    首先,Cypress只适用于web的应用

    第二,Cypress只能使用js进行代码的编写,所以这需要有一定的js

    语言基础

    第三,Cypress不支持多个浏览器tab

    第四,Cypress只支持自身的浏览器

    Jmeter
    
    Github Start : 5.2K
    

    图片

    做过性能测试的同学应该都知道这个性能测试工具了。Jmeter,毋庸置疑是目前市场使用率最高的性能测试工具了,与loadrunner很大的不同就是免费。

    只要是免费的工具,一定会有很大的市场。

    Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序)。它可以用来测试静态和动态资源的性能,例如:静态文件,Java Servlet,CGI Scripts,Java Object,数据库和FTP服务器等等。JMeter可用于模拟大量负载来测试一台服务器,网络或者对象的健壮性或者分析不同负载下的整体性能。

    同时,JMeter可以帮助你对你的应用程序进行回归测试。通过你创建的测试脚本和assertions来验证你的程序返回了所期待的值。为了更高的适应性,JMeter允许你使用正则表达式来创建这些assertions.

    Puppteer
    
    Github Start : 70.6K
    

    图片

    Puppeteer可能很少人听过,但是这个工具,确实挺好用的。它是Google开源的一个测试录制插件。

    Puppeteer对于模拟类似人类的浏览器交互行为非常出色。像Selenium Webdriver一样,它可以模拟广泛的浏览器用户交互行为。Puppeteer还具有Selenium Webdriver所缺乏的一系列功能。它可以捕获屏幕截图并生成特定屏幕的PDF。如果你想用它来进行可视化测试,这是一个很好的选择。它的高速度也是很多开发者选择测试工具的一大考量。Puppeteer的另一个主要卖点是,它与Chrome及其调试和开发者工具高度集成。这一点应该不奇怪,因为和Chrome一样,Puppeteer也是由Google开发并支持的。因此,如果你只在Chrome中开发和测试你的应用程序,Puppeteer是一个很好的选择。然而,如果你使用Firefox、Edge或Safari进行开发或测试,Puppeteer是没办法的,你应该选择Selenium Webdriver。

    playwright
    
    Github Start : 70.6K
    

    图片

    Playwright是微软提供的一个自动化工具,与puppeteer非常相似,也算是puppeteer的衍生品,弥补了puppeteer支持浏览器这一块的不足。

    Playwright是一个强大的Python库,仅用一个API即可自动执行Chromium、Firefox、WebKit等主流浏览器自动化操作,并同时支持以无头模式、有头模式运行。

    Playwright提供的自动化技术是绿色的、功能强大、可靠且快速,支持Linux、Mac以及Windows操作系统。

    如果对python自动化测试、web自动化、接口自动化、移动端自动化、面试经验交流等等感兴趣的测试人,可以 点这自行获取…

    展开全文
  • 如何搭建自动化测试框架

    千次阅读 2021-07-23 05:51:37
    序今天先聊聊如何搭建自动化测试框架,主要会聊聊一些思路上的东西,从一个最简单的demo到把一个框架该有的组件都搭建好。本文主要以web自动化为例子,使用的语言是js。一、什么是自动化测试框架在了解什么是自动化...

    今天先聊聊如何搭建自动化测试框架,主要会聊聊一些思路上的东西,从一个最简单的demo到把一个框架该有的组件都搭建好。本文主要以web自动化为例子,使用的语言是js。

    一、什么是自动化测试框架

    在了解什么是自动化测试框架之前,先了解一下什么叫框架?框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面,而后者是从目的方面给出的定义。

    —百度百科

    对于自动化测试框架大致包含以下的内容

    自动化测试工具(selenium、puppeteer…)

    Runner(Jest…)

    日志(logger)

    报告(reportor)

    持续集成

    二、使用puppeteer开始写一个最小的demo

    2.1 工具选型

    目前,对于web端UI自动化比较主流的工具有selenium、webDriver。而在这里选择的是Puppeteer,先来了解下puppeteer。

    在chrome 59 chrome团队支持了headless模式,在Headless模式下,用于自动化测试和不需要可视化用户界面的服务器。例如,你想在一个网页上运行一些测试,从网页创建一个PDF,或者只是检查浏览器怎样递交URL。

    Puppeteer是谷歌官方出品的一个通过DevTools协议控制headless Chrome的Node库。可以通过Puppeteer的提供的api直接控制Chrome模拟大部分用户操作来进行UI Test或者作为爬虫访问页面来收集数据。

    Puppeteer 核心功能:

    利用网页生成PDF、图片

    爬取SPA应用,并生成预渲染内容(即“SSR” 服务端渲染)

    可以从网站抓取内容

    自动化表单提交、UI测试、键盘输入等

    帮你创建一个最新的自动化测试环境(chrome),可以直接在此运行测试用例

    捕获站点的时间线,以便追踪你的网站,帮助分析网站性能问题

    Puppeteer是使用node语言进行开发的,在使用中你可以使用async/await异步解决方案,async/await可能是目前为止最简单的异步方案了。

    很强大是不是,接着我们去学习下puppeteer的接口文档,接着开始写我们的demo。

    2.2 测试用例

    该用例是直接使用puppeteer,先launch一个browser然后newPage,接着开始写case。如果你想执行可以把then后的内容改成访问百度界面的。如下图,

    53470390529255b0c60cb4468dae1298.png

    7089ac7d63e97d767696370f3dd6368a.png

    我们来看下整体的框架,如下图,图中直接使用Puppeteer。

    对于以上的case,假如我要在写一条case,需要新建一个js文件,然后先launch一个browser然后newPage,接着开始写case。在这样的一个过程中我们可以看到我们每次都要launch browser,close browser,当然还有其他的问题比如怎么快速的执行多个用例等等,那么该如何解决这个问题呢?这时候考虑引入一个Runner的概念。

    三、使用Jest进行lifecycle管理

    3.1 了解Jest

    对于Jest,在并发执行可以保持最高的性能,在沙盒模式下每个测试都有一个干净的环境。Jest在做UT、AT有着很成功的应用。接着我们在框架里面加入lifecycle去管理一些资源。需要去做一些setup、teardown的工作。

    3.2 Jest+puppeteer

    在这里抽象了一个environment(下图左),去统一管理测试过程中的一些资源,在这里引入了setup、teardown,声明全局的browser、page变量。而对于case(下图右),使用Jest的case编写规则去写,首先是一个describe,类似test suite,在describe可以写多个it,一条的it代表一条的case,你就可以在一个文件里写多条的case。对比下二中的case此时我们不需要在每次执行launch了。

    6c2d7d2e32b1cfd06a5c25f93b6cb52e.png

    5b0844c7c535db4bb2f7d63b35820167.png

    接着看下整体的框架图,可以看到我们把jest给加入了

    对于上面的case我们把对页面元素的建模跟对应的操作以及测试方法都写到同个class里面了。对于这样的case,如果改动了某个元素需要改动很多个的文件,维护成本很高,这是我们不希望看到的。接下来我们引入了POM.

    四、POM

    4.1 了解POM

    POM的全称是Page Object Model。POM模型要求将一个页面上所有功能/可重用组件写到一个class文件中,它存在以下规则

    1.Page Object Model is a design pattern to create Object Repository for web UI elements.

    2.Under this model, for each web page in the application, there should be corresponding page class.

    3.This Page class will find the WebElements of that web page and also contains Page methods which perform operations on those WebElements.

    ce2f2712bbf26c6691c50a6ba32d9fbb.png

    对于三中的代码很明显没有遵循POM,接着我们进行改进。

    4.2 采用POM模型编写代码

    在这里我抽象出一个pages,把不同界面的建模以及对元素的操作放在一个文件夹下,在case层只有测试方法。

    3e610421b5233e6d741b5c4796efac22.png

    在使用POM的过程中我还做了一件事情,抽象出driver层,对puppeteer的API进行封装,封装的意义有两方面为了支撑其他的工具比如selenium,统一接口,更好的做兼容性测试,(puppeteer支持的browser类型比较少);另一方面,对于driver这类的工具在ui

    测试工程其实不会用到所有的大概能用上十几个method,我们可能对它进行封装让它更好用,比如可以在click前waitFor这个element出现,这样做就不需要在写case的时候每次click前都wait了。

    fd217ec645ed7a61031c337168fee641.png

    接着我们来看下整体的框架:

    ef2d0b2948a9ab8c94da4d29e2bbc95b.png

    对于这样的框架我们能很好的工作了,接下来需要加的是啥呢?

    五、Logger&Report&Assert

    loggger、report、assert是框架的必须部分。

    logger需要统一的管理打印到console或者某个file,logger可以帮助我们更快的定义问题对于logger可以分为两类一个应用本身的log,一个测试代码的log,根据需要收集;report是在测试结束后把结果展示出来,可以是dashboars可以是html,告诉case的整体情况,以及错误时候的信息,当然还可以是更详细信息,比如说每一步的步骤信息等;Assert这里是采用了Jest自带了,觉得Jset自带的expect已经很强大了,当然如果你需要用别的或者封装也是可以的。我们接着看下代码(如下图),对于这些我们去使用是很方便的集成的,易于集成也是衡量一个第三方library的一个重要指标。

    78c689a1fa9b0d6e24ff708c03cf8dcd.png

    f5d5bd0933ce0515d6bf4074e9cecfe5.png

    对于框架层加了两个模块进去。

    六、其他工具类

    54b91fb449d65793d82e0c2a58cc8f03.png

    对于框架而言,通常会留有一个Helper,把跟测试相关的工具放在这里。方便使用与管理。我们看下框架。

    七、持续集成

    首先,持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。自动化测试作为在持续集成中的一个重要环节,我们需要在执行UT/IT后接着执行AT,更早的发现bug。在这里可以使用docker搭建puppeter的运行环境,在jenkins上通过pipeline在docker中执行测试。

    八、总结

    以上就是本文的主要内容,希望看完这篇文章大家可以思考一些问题,对于这样的设计有何优化建议?在编写测试中可能会遇到哪些问题?我来说下,如何支持多个browser?测试太慢如何通过缓存提供web 元素的加载?面对这些该如何解决呢?

    最后的最后,该框架的源码在github上,https://github.com/summergan/EndToEnd

    目前只有文章中的demo,后续有时间会继续更新。

    版权声明:本文出自51Testing原创,51Testing软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。

    展开全文
  • pytest接口自动化测试框架搭建

    千次阅读 2022-03-04 20:52:09
    文章目录 目录 ...最近自己也抽时间梳理了一份pytest接口自动化测试框架,因此准备文章记录一下,做到尽量简单通俗易懂,当然前提是基本的python基础已经掌握了。如果能够对新学习这个框架的同
  • 搭建的自动化测试框架要包括API测试,UI测试,APP测试三类。以上三类其实可以简化为两类,那就是:
  • pytest自动化测试框架基础篇

    千次阅读 2022-05-05 22:52:39
    pytest自动化测试框架基础篇
  • 什么是自动化测试框架自动化测试框架是为自动化测试脚本提供执行环境的脚手架。框架为用户提供了各种优势,帮助他们有效地开发、执行和报告自动化测试脚本。它更像是一个专门为自动化组织的测试而创建的系统。...
  • 自动化测试框架设计模式

    千次阅读 2022-02-27 17:07:50
    在使用上面的自动化框架时,通常会结合使用分层思想,也就是一些自动化框架设计模式,今天重点分享一下UI自动化框架设计使用比较多的一种设计模式:Page Object设计模式。 一、什么是PO模式? PO模式,全称为...
  • 自动化测试框架有什么作用?

    千次阅读 2022-04-02 16:16:34
    在自动化测试中使用框架是很常见的,除了手动干预外,一般来说使用自动化框架有着以下几种...问题发现的越早,解决成本就越低,采用自动化测试框架的效益也就越高。 3.提高测试效率:测试占据了整个开发生命周期的..
  • 文章目录一、前言二、框架搭建流程2.1 项目创建2.2 README文件2.3 .gitignore文件2.4 什么是测试框架?2.5 分层设计2.6 框架搭建2.6.1 公用目录(common)2.6.2 测试用例目录(testcase)2.6.3 测试数据目录(data)...
  • 【自动化测试】自动化测试框架与工具

    万次阅读 多人点赞 2021-05-06 21:01:01
    文章目录1)什么是自动化测试框架?1.1 什么是框架?1.2 什么是自动化测试框架?1.2.1 优点:1.2.2 框架的基本组件1、需要配置文件管理:2、业务逻辑代码和测试脚本分离3、报告和日志文件输出4、自定义的库的封装5、...
  • Android 自动化测试框架简介

    千次阅读 2020-11-18 20:39:38
    Android常用的自动化测试工具框架: Monkey,MonkeyRunner,UIAutomator,Robotium,Appium,Monkey Talk...... 但这些工具框架都是什么呢有什么联系呢,先通过一张图来了解一下吧 是不是一脸懵逼,不知道这...
  • Robot Framework自动化测试框架

    万次阅读 2022-02-18 22:29:26
    它是一个基于Python语言开发的,可扩展的,是以关键字驱动模式的自动化测试测试框架。也是一个跨平台的通用的,与应用程序和技术无关的测试框架。它有一个高度模块化的架构: 数据层、测试框架、测试库或第三方...
  • java接口自动化测试框架搭建

    千次阅读 2022-02-17 10:47:32
    } given():一次网络请求所需要的条件都在这里,头信息、query参数 when():触发条件 then():断言 extract():提取返回值 二.junit执行测试用例 1.新建Calculate类 package com.coke.util; public class ...
  • 5种比较常见的自动化测试框架

    千次阅读 2020-10-26 14:34:43
    自动化测试框架
  • 五种常见的自动化测试框架

    千次阅读 2021-10-09 16:57:06
    自动化测试框架就是用于测试自动化的框架。具体来说,它提供了自动化测试用例编写、自动化测试用例执行、自动化测试报告生成等基础功能。我们只需要基于这个框架,完成和业务高度相关的测试用例设计和实现即可。另外...
  • 五大Java自动化测试框架

    千次阅读 2021-03-03 10:36:09
    在此,我向大家介绍并比较五种用到了Java的自动化测试框架。由Kent Beck和Erich Gamma开发的JUnit是xUnit框架的一个实例。其设计的宗旨是让Java开发人员能够编写出各种脚本、并执行那些可重复...
  • 自动化测试之单元测试框架

    千次阅读 2022-02-13 20:19:45
    单元测试框架 一、单元测试的定义 1:什么是单元测试? 2:为什么要做单元测试? 二、unittest框架以及原理介绍 1、unittest框架最核心的四个概念: 2、单元测试案例 三、编写测试用例 1、TestCase类编写...
  • Python + selenium 自动化测试框架

    千次阅读 多人点赞 2021-12-14 16:06:59
    自动化测试框架 项目自动化测试框架设计为4层 1.基础层(通用层) 基础层: 将通用,重复性比较高的代码封装到这里。 通用的代码的。 其他3层想要的话,就可以直接调用。 例如: 读取测试数据的代码,读取配置信息...
  • 随着Python语言的使用越来越流行,基于Python的测试自动化框架也越来越流行。在项目选择最佳框架时,开发人员和测试人员会有些无法下手。做出选择是应该判断很多事情,框架的脚本质量,测试用例的简单性以及运行模块...
  • 每一个测试人员都应该了解每种框架的优缺点,以帮助你的团队更好地确定最适合的测试框架,以达到事半功倍。
  • Python Pytest 自动化测试框架搭建

    千次阅读 2022-01-04 17:20:15
    casefiletemplate.py 用于根据 params 文件夹下的测试数据文件自动生成.py 的测试用例 consts.py 定义发送报告用的全局变量 email.py 封装的发送 email 报告功能 get_casedate.py 读取 params 文件夹下的测试数据...
  • 好用的安卓自动化测试框架Espresso

    千次阅读 2022-04-06 14:28:36
     Android自动化测试是应用开发中提升开发效率的一种方式,它可以在短时间内跑完所有的测试方案以及实现各种交互,从而让开发者更加方便和直观的知道代码的实现效果。  Android自动化测试可以分为单元测试、UI测试...
  • Selenium自动化测试框架

    千次阅读 2021-10-15 16:41:31
    1.Selenium概述 1.什么是框架框架(framework)是一...框架,其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。 2.为什么使用框架? 1)自己从头实现太
  • 几种典型的软件自动化测试框架

    千次阅读 2020-09-22 15:30:24
    一个自动化测试框架就是一个由假设、概念以及为自动化测试提供支持的实践的集合。以下描述五种基本的自动测试框架:模块化测试脚本框架,测试库构架框架,关键字驱动/表驱动测试框架,数据驱动测试框架,以及混合...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 474,051
精华内容 189,620
热门标签
关键字:

自己写自动化测试框架