Giter Club home page Giter Club logo

totoro's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

totoro's Issues

指定浏览器进行测试

使用方式

totoro test --browsers=ie,chrome,firefox
totoro test -b ie/6,ie/7

totoro 将会根据用户的输入匹配相应的浏览器进行测试。

目前还不支持针对某个操作系统的浏览器进行指定。

browsers 有效配置:

  • ie ie6 ie7 ie8 ie9 ie10
  • chrome chrome22
  • firefox firefox19
  • opera opera11
  • safari safari6
  1. 对于没有版本的都是模糊匹配,对于匹配上的浏览器都将进行测试。
  2. 针对某一具体的浏览器. 如果不匹配将没有浏览器被执行

跑通 thrill + queen + selenium grid

确保机器上已经安装了 Javanode

**注意:**简单起见,文中都给出了推荐端口,如有必要,可自行替换。

一、启动 selenium-grid hub

1、下载最新的 selenium-server-standalone-{{version}}.jar(本文档使用 2.29.0 版本) 到任意目录,本文档假定该目录为 totoro-server 。

2、在同目录下创建 hub.json 配置文件。

{
    "host": "{{grid-hub-host}}",
    "port": 4444,
    "newSessionWaitTimeout": -1,
    "servlets" : [],
    "prioritizer": null,
    "capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
    "throwOnCapabilityNotPresent": true,
    "nodePolling": 5000,
    "cleanUpCycle": 5000,
    "timeout": 300000,
    "browserTimeout": 0,
    "maxSession": 5
}

更多 hub 配置项请参见 Selenium Wiki

3、命令行启动 selenium-grid hub

java -jar selenium-server-standalone-2.29.0.jar -role hub -hubConfig hub.json

二、启动 selenium-grid node

1、下载最新的 selenium-server-standalone-{{version}}.jar 到任意目录。如果 node 和 hub 在同一台机器上,则可跳过此步骤。

2、在同目录下创建 node.json:

{
    "capabilities": [
        {
            "browserName": "iexplorer",
            "version": "9",
            "maxInstances": 5,
            "seleniumProtocol": "WebDriver"
        },
        {
            "browserName": "firefox",
            "maxInstances": 5,
            "seleniumProtocol": "WebDriver"
        }
    ],
    "configuration": {
        "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
        "maxSession": 5,
        "port": 5555,
        "host": "{{grid-hub-host}}",
        "register": true,
        "registerCycle": 5000,
        "hubPort": 4444,
        "hubHost": "{{grid-node-host}}"
    }
}

你可以修改 capabilities 中的选项以确保符合你的要求。其中:

  • firefox 仅支持 17 及以下的版本。
  • firefox 外,一般其他浏览器都需要 安装驱动程序,包括 chrome 和 ie。
    • 强烈建议所有浏览器都安装到默认路径。因为 opera 和 safari 的驱动是 jar 包内置的,需要它们安装在默认路径才能识别。
    • 通常安装驱动的方法是将驱动文件存放的路径加入环境变量 Path,但由于 ie9 可能存在某些安全限制,推荐将 ie 驱动直接放置到 system32 目录下而不设置 Path。
    • ie 的驱动需要注意 32和64位操作系统的区别。
  • ie 最好指定 version 。指定版本的 ie browserName 为 "iexplorer",不指定版本的 ie browserName 为 "*iexplore" 。

更多 node 配置项请参见 Selenium Wiki

3、命令行启动 selenium-grid node

java -jar selenium-server-standalone-2.29.0.jar -role node -nodeConfig node.json

打开 {{grid-hub-host}}:4444/grid/console,如果正常的话,应该能看到连接上的 node 的浏览器信息。

三、运行 queen

1、下载 queen 到任意目录,为方便调试,使用的是源码。如和 hub 是同一台机器,建议下载到同一目录。

2、安装依赖。进入 queen/ 目录运行:

npm update

3、修改 queenConfig.js,确保符合你的需求:

module.exports = {
    capture:"{{queen-host}}:9000",
    populator: {
        type: "selenium",
        config: {
            host: '{{selenium-hub-host}}', 
            port: 4444
        },
        clients: [
            { browserName: "iexplorer", version: "6" },
            { browserName: "iexplorer", version: "7" },
            { browserName: "iexplorer", version: "8" },
            { browserName: "iexplorer", version: "9" },
            { browserName: "chrome"},
            { browserName: "firefox"},
            { browserName: "opera"},
            { browserName: "safari"}
        ]
    }
};

注意:

  • capture 为 queen 的服务地址,这里 host 如果配置为 “localhost” 或者 “127.0.0.1”,则只能本机访问。如多台机器操作,需填写真实 IP 或域名。
  • clients 中配置的浏览器和配置必须是 selenium-grid 服务支持的,否则会报错。

4、 命令行运行:

node ../../bin/queen

如启动成功,则 selenium-grid 会自动打开 url:http://{{queen-host}}:9000/?clientId={{selenium-id}}

四、运行 thrill

注意:此步骤以后会由 totoro 客户端替换掉

1、客户端机器安装 thrill

sudo npm install -g thrill

2、运行测试

thrill -h {{queen-host}}:9200 path/to/runner.html

注意:thrill 运行的位置没有特别的要求,只要 runner 的路径传递正确即可。

使用 totoro 测试 arale 基础模块

基础设施

  • base
  • class
  • events
  • widget

工具

  • messenger ie9, opera 不通过
  • iframe-shim
  • position
  • easing
  • cookie
  • placeholder
  • iframe-uploader 没有测试用例
  • fixed

arale ui 组件

  • autocomplete ie6,7,8,9 用例跑不过,需要看下。
  • select
  • overlay
  • switchable
  • calendar
  • popup
  • dialog 不通过 ie6
  • tip
  • validator 不通过

命令行参数

  1. totoro test
    • 命令可以在模块根目录或者 test/tests 文件夹中运行
    • 会自动找到 test/tests 目录中的 runner.html 开始测试
    • 如果没有找到 runner.html,则根据默认测试框架(mocha, expect.js, sinon, event-simulate)生成 runner.html。也就是说,如果默认的测试框架无法满足需求,则需要开发者自己拼写 runner。
    • r --run path/to/runner.html
      指定要运行的runner,这样使用非指定测试框架,或者存放在非指定位置的runner,就可以运行
  2. -f --force
    强制重新生成 runner

监控单元测试执行效率

是否可以不需要为性能测试特意进行编码,仅通过运行单元测试,通过某种方法,判定一个方法的执行效率?

mocha 测试框架中有整体测试慢的时间测试,但对于单个方法是否可行,需要再考察。

或者可以仅监控整体测试时间,对于耗时超过一定程度的,予以警告。

如一个测试在多个浏览器中运行的时间为:30ms, 35ms, 40ms, 120ms,就认为120ms 是不正常的,需要警告

支持全局配置

{
    "serverHost": "xxx",
    "serverPort":  "xxx"
}

可在全局配置中进行配置

0.2.0 开发计划

Driver 常规功能

  • #39 整体设计改进
  • 命令行及参数
  • 配置文件及支持 package.json 配置
  • 将adapter移至server端
  • #47 测试指定超时
  • labor 匹配指定的 platform
  • server proxy cache
  • labor 崩溃后自动重新寻找匹配的labor
  • labor 负载均衡
  • #38 socket 发送频率控制
  • #40 测试用例中产生的语法错误处理
  • #41 测试适配器的扩展
  • windows 可用
  • #43 代理服务的优化
  • #53 帮助第三方浏览器守护程序监控的广播功能(支持qs的自定义id)
  • #54 内置jasmine adapter
  • 拆分客户端和服务端
  • 进行客户端和服务端的版本匹配,如不匹配则自动提示升级
  • 如果用户不指定browsers,则自动匹配服务端可用的browsers
  • 支持按默认规则查找 totoro-adapter.js

Driver 探索性功能

  • 提升测试效率
    • #44 runner增加新窗口运行模式
  • 日志
    • 可定制日志格式

站点&文档

  • 在 totorojs.org 首页中填充 totoro-test 的内容
  • changelog
  • 更新 readme

想个好名字

npm name: totoro
domain name: totorojs.org

来自宫崎骏的动画《龙猫》中的主角名:豆豆龙

配置文件

如题,需考虑:

  1. totoro-config.json
  2. ~/.totoro/config.json
  3. 新老版本spm的package.json

同时需考虑命令行选项:参考 #8

配置文件的规范需要先在小组达成共识

socket 发送频率控制

问题:目前只要有消息就会发送,测试用例数量较多且测试效率较高时,多个socket同时发送会造成内存溢出。

解决:labor和client都控制发送频率

命令行参数

命令行方式

totoro-test 目前充当了 server 和 client 双重角色。分别通过 --server--client 来启动.默认是 client

启动服务

totoro-test
    --server
    --serverHost
    --serverPort

启动测试

totoro-test
    --runner
    --adapter
    --platforms

查看可用测试机器

totoro-test
    --list

配置方式

  • 目前 totoro 统一成 totoro-config.js 配置,具体配置方式待定。

整体设计改进

问题:

依赖thrill和queen

  1. 代码复杂,难以维护和改进
  2. 测试效率较低
  3. 对异常的处理不完善

解决:

根据原思路重构

2013年方向性讨论

  • 主持人:沉鱼
  • 会议记录:贯高
  • 时间:2012.01.08 10:30-11:30
  • 地点:14F 石鼓书院
  • 与会人:
    • 主任,大伯,玉伯
    • 鹭飞,远尘,天作,张初尘,竹卢
    • 沉鱼,贯高,丹侠
  • 会议目标
    1. 明确质量控制的目标
    2. 明确我们真正需要去做的事情
  • 达成共识
    1. 确认2013年质量控制的目标
    2. 确认质量控制要做的事情
      1. 基础技术组提供质量工具支持
      2. 质量小组负责质量措施推进
      3. 低优先级的工作可先不做
      4. 查询类的需求不放在这件事情中,交由贯高负责

120108-2013

确认package.json 中测试框架和测试浏览器类型的配置

1、测试框架的配置

考虑过两种方式:

  1. 所有的测试框架不转换成cmd模块,通过探测测试脚本来猜测使用了哪些测试框架
    • 好处:无需任何配置
    • 坏处:随着支持的框架增多,探测成本变高,难以维护
  2. 所有的测试框架转换成cmd模块,mocha和jasmine这类测试套件比较特殊,不进行包装,但仍然发布到源上,开发者需要在 package.json 中指定依赖
    • 好处:市面主流的测试套件有限,可以根据指明的测试套件生成runner,其他的断言之类的工具通过require获得,无需关心
    • 坏处:开发者需要进行配置,多了一个工作步骤(有考虑过是否给定默认配置,但考虑到以后测试框架会不断演变,还会导致默认配置也需要变更,暂提供),但此步工作量较小。

结论:

使用方式2

2、指定要测试的浏览器或者运行环境的配置

这个先不提供配置,使用driver的默认配置即可

之前有讨论过用 engines,platform之类,仅参考


这些配置项在spm2中需要重新设置到 totoro 字段中

thrill 关于扩展适配器的选择

适配映射

totoro test --mapping=tests/runner.html,seajs

通过这个配置可以在指定的测试页面中添加 seajs 测试适配器。目前还没有想到更好的方式,暂时先通过这个方式啊。

在 thrill 模块中修改代码增加了下面这个配置:

adaptMapping: ['**.html', 'adapt']

通过这个来对指定页面添加适配器,适配器将会添加到 head 最后面。

ie9 测试不通过

相关代码: static/constractor.html

  window.report = function(data){
 52                 console.info('report---', data.action)
 53                     reports.push(data)
 54    
 55                     if(data.action === 'end'){
 56                         var orderId = data.orderId
 57                         console.log('finish order: ' + orderId)
 58                         //setTimeout(function() {
 59                         removeOrder(orderId)
 60                         //}, 0);
 61                     }
 62                 }

如果 remoteOrder 异步执行,就是加上 setTimeout 程序没有问题.
下面是 ie9 下面的打印信息.

  • 异步正确的日志
    52559D21-B306-4F56-9049-34CE0EF8E4E3
  • 同步产生错误的日志
    19F0BC54-9F1A-4B2E-B5F4-89ECD020F30E

@fool2fish

selenium 相关工具升级

  1. selenium server 都已经从 2.29.0 升级到 2.31.0, 4 台服务器都已升级
  2. firefox 升级到最新的 19.x

申请测试服务器

暂定申请2台服务器

需满足如下条件:

  • 固定 ip
  • 可安装 windows(要能同时跑ie6789几个版本)
  • 不被干扰(因为会操作浏览器,不能被人为关掉)
  • 便于管理操作(目前看起来代码可能不是很稳定)

过滤重复 labor

下面两个地方需要进行过滤:

  1. 查看有效浏览器列表.
  2. 分发 order.

totoro-test server 代理服务乱码

由于在某些测试用例中存在请求 GBK 的资源(如: seajs config tests). 这个时候我们对请求的内容没有进行编码转换就直接缓存了,所以会造成代理的结果不正确。
但是目前获取资源请求的编码暂时没有找到,所以对目前代理的处理方式进行了修改,并且暂时也先不缓存资源了。

@fool2fish

增强日志功能

  1. 日志格式可配置,可自动显示代码所在的文件,方法位置等
  2. 确定日志规范
  3. 帮助工具进行最基本的数据分析,如每天有多少 浏览器次 测试运行等

客户端超时选项

see 9af6c94

  • 命令行参数: --timeout
  • 单位:分钟
  • 默认值: 5

注意,这个和测试超时没有关系,测试超时是又测试套件本身指定的。客户端到达该时间后,会自动停止测试,以防浏览器卡死等情况出现。

0.1.0 开发计划

规划

  • #10 想个好名字
  • #9 整体技术方案

driver

  • #11 跑通 thrill + queen + selenium grid
  • #21 确认package.json 中的配置项
  • #13 runner 拼装方案
  • #8 命令行参数
  • #22 解决 queen 同类浏览器重复运行单元测试的问题
  • #23 使用 totoro 测试 arale 基础模块
  • #28 定位和修复 arale 测试中发现的测试框架的问题

选择单元测试框架

  • 测试基础知识
  • 套件
  • 断言
  • #17 翻译 sinon 文档,转换成cmd模块发布到源
  • #18 事件模拟

生产环境部署

  • #14 申请测试服务器
  • #16 部署服务端代码

文档

  • #20 测试系统设计方案
  • #19 测试基础知识ppt

前端测试系统方案总结与讨论

将前端测试系统的方案做个总结,做成 PPT
然后订个会议室讨论下

除了我们自己:

  1. 邀请杨延昭、阿玺、本参等人,他们很感兴趣,有可能可以直接给予协助
  2. 邀请测试团队相关人员,可以听听他们的看法(可提前沟通,按需邀请)

产品参考

测试框架

  • expect.js - 断言
  • sinonjs - mock
  • mocha - 测试框架,任意断言,测试覆盖率,测试时间等

兼容性测试和持续集成

特别关注

Selenium

这是一套和浏览器交互的解决方案,目前所有号称能搞定浏览器兼容性测试和功能测试的都是基于这个东东,阿里系的测试系统也一样。

更多移步 #6

thrill

其他

  • uitest - 淘宝开发的专门用于 uitest 的工具
  • TDJS - 使用 socket.io 原理开发的测试工具,注意视频demo和原理讲解很棒!
  • dagger - 网易的封装了 selenium 的 ui 测试工具
  • ci.testling - 和 browserling 配套的多浏览器单元测试工具,支持node,package.json 配置相关信息
  • saucelabs - 支持多浏览器和操作系统的集成测试站点
    • 支持多语言,每个语言需下载对应的客户端,如 node:npm install wd
    • 需要在测试代码中指定浏览器
    • 定制的ui测试api
    • 开放了一些自定义事件,如:brower.on('command',fn)
    • 内网代码,需由it统一安装一个 sauce-connect-latest Java 包
    • 提供 rest api
  • phantomjs - 提供webkit环境的node库
  • CasperJS - 基于phantamjs,提供了自己的断言,各种基础方法,包括浏览器端方法的测试框架
  • travis - 仅提供集成,测什么,怎么测完全自己来

无线

基本不用看的

  • browserstack - 类 saucelabs
  • browserling - 类 saucelabs
  • Buster.JS - 非稳定版,会自动查找本机已安装的浏览器进行测试,提供自己的断言、桩、套件等。
  • jenkins - java写的,应该不是为前端服务的
  • Testacular - 几个人提到,最近官网改版,可以再看看

自定义报告

不支持命令行参数配置,仅支持模块调用

new Client({report: fn(labors)})

先前的讨论

原始需求

  1. 收银台测试结果、覆盖率
  2. 服务化规则检查
  3. 基础技术代码规则
  4. KPI 质量目标

拆分功能点

代码规范检查

  • 需求来源:前端服务化、基础技术组
  • 希望达成:
    1. 可自定义添加规则
    2. 开发可及时看到反馈
    3. 有监控警告、趋势图等后台功能

文件引用分析

  • 需求来源:基础技术组、全局导航等公用文件
  • 希望达成:
    1. 公用文件引用分析
    2. Arale 等类库的全站覆盖情况
    3. JS 脚本的正向和反向引用分析

系统状态检测

  • 需求来源:基础技术组
  • 希望达成:
    1. sharedata 挂载状态
    2. 服务器状态
    3. UISVR 2.0 配置问题
    4. 与运维结合,对网络的前端稳定性进行监控

通用数据监控

  • 浏览器统计数据
  • PV、UV 等通用业务数据,不用太多,常用的就好
  • 页面加载时间、HTTP 链接数、TTI 等通用性能指标
  • JS 等报错信息,希望带上堆栈信息
  • 静态资源 404 情况

自定义监测

  • 需求来源:基础技术组
  • 希望达成:
    1. 页面中同一模块的多版本检测与预警
    2. 前端功能测试覆盖率与结果
    3. 方便的进行自定义监控的埋点和查看

杂项需求

  • 集成测试帐号自动切换

Selenium 研究

中文文档

client driver 相关

grid 相关

待研究的点

  • selenium: automationAtoms
  • commonJS: promise
    • 语法糖,降低异步编程的复杂性。jasmine中有有相关的实现,老赵的jscex似乎也有关系?
  • tap: http://testanything.org/

浏览器丢失问题的处理

测试前8个浏览器正常,但是返回结果只有6-7个浏览器信息,是否增加一种机制可以确保用户能够得到所有浏览器的结果,比如在返回结果前如果发现缺失,我们可以和之前的对比,重新对剩余的浏览器发起再次请求,或者就是更明确的对用户进行提示?

质量小组2012总结

做的好的点

质量周刊

  • 数据获取cq -->转为小组可能会方便
  • 了解一下看的同学怎么认为
  • 沉淀的问题 ---> 记录、质量工具等

监控

  • 有结果、有效果
  • 规则准确性
  • 归纳整理、28天限制
  • 数据没有分组、jira不能很好整理
  • 有价值的讨论没有分享
  • 监控与CDN问题(网络)

质量月刊:

  • 维度全、图形分析清晰
  • 问题跟进情况 -- 需要提高
  • 分析层面

CR:

  • CR平台问题,打通cq项目,是否有前端修改
  • 上海做的不错
  • 各线业务的了解

做的不好的点:

分析

  • 展新的系分
  • 时间不太靠谱 -- 态度强硬
  • 不需要形式的问题

故障分析

  • 压力山大
  • 工具上
  • 是不是可以放到各个小组来组织 -- 主持人

总结

  • 缺陷分析的总结

2013

  • 前端测试
  • 口碑
  • 监控报警
  • 质量衡量的标准 - 千行缺陷密度
  • 措施转变为习惯
  • 自动化机制

憧憬

  • 线下质量评估办法
  • 精简措施
  • 向收银台后台开发同学学习、低缺陷,高质量(赢得口碑)

runner 拼装方案

暂不提供配置,也进行探测,只提供 mocha + expect.js + sinon + event-simulate 的组合方案

mocha 使用原文件

其他封装成 cmd 模块,使用时需要 require

否则就需要开发者自己生成 runner

显示当前服务有效浏览器列表

totoro test -b
totoro test --browsers
info: Chrome 25.0.1364 (Windows XP)
info: Chrome 26.0.1410 (Mac OS X)
info: Firefox 18.0.0 (Mac OS X)
info: Firefox 19.0.0 (Windows 7)
info: IE 6.0.0 (Windows XP)
info: IE 7.0.0 (Windows XP)
info: IE 8.0.0 (Windows 7)
info: IE 9.0.0 (Windows 7)
info: Opera 12.14.0 (Windows XP)
info: Safari 5.1.7 (Windows 7)

测试适配器的扩展

  1. 适配器模块代码重构.�
  2. 支持用户自定义适配器
totoro-test --adapter=tests/adapter.js

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.