qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

目前游戏测试的三种处境

  第一种:玩游戏,找bug;高级一点就是用专业的测试方法进行游戏测试
  特征点:隶属于程序或由策划兼职---也就是并非一个和程序策划平行的部门,而是一个下级部门(有些则根本被排除在研发体系之外)
  职责:找bug,帮助修正bug等。
  国内最常见的就是这种。
  第二种:对游戏研发的整个过程进行质量控制(QC)
  特征点:测试部门是一个和策划程序平行的部门(实质上平行,某些表面上平行的其实也要归为第一类)
  职责:找bug,帮助修正bug;参与游戏早期开发,以预防bug;在开发流程上提出建议,以预防bug。
  国内一线公司多数是这种。
  第三种:对游戏研发的整个过程进行质量管理(QA)
  特征点:QA高于程序和策划,同时有一个直属的测试部门(QC,和程序策划平行)
  职责:改进开发流程,预防bug。
  至今没有见过。

posted @ 2014-07-22 09:15 顺其自然EVO 阅读(133) | 评论 (0)编辑 收藏

打造自己的Linux服务器监控小工具

     摘要: 周末在家蛮无聊的,思考人生的同时突发奇想就写一个服务器监控的小工具吧。学JAVA快1年了,刚好检验一下自己!  仔细想想呢估计作用可能也有限,毕竟外面各种监控工具也很多,初衷其实也只是练练手,加上平时比较懒,那么为了更方便的看服务器性能指标,所以就选了这个题材咯,那么就开始吧。  不过优点也是有的嘛,至少不需要在服务器端装一个脚本之类的了。  一、小工具的功能  1 能够读取服务器CPU,IO,M...  阅读全文

posted @ 2014-07-21 10:18 顺其自然EVO 阅读(2105) | 评论 (0)编辑 收藏

CodeFirstMigrations更新数据库结构

  背景
  code first起初当修改model后,要持久化至数据库中时,总要把原数据库给删除掉再创建(DropCreateDatabaseIfModelChanges),此时就会产生一个问题,当我们的旧数据库中包含一些测试数据时,当持久化更新后,原数据将全部丢失,故我们可以引入EF的数据迁移功能来完成。
  要求
  已安装NuGet
  过程示例
//原model
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
public class Lesson {
public int lessonID { get; set; }
[Required]
[MaxLength(50)]
public string lessonName { get; set; }
[Required]
public string teacherName { get; set; }
public virtual UserInfo UserInfo{get;set;}
}
//新model
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
public class Lesson {
public int lessonID { get; set; }
[Required]
[MaxLength(50)]
public string lessonName { get; set; }
[Required]
[MaxLength(10)]
public string teacherName { get; set; }
public virtual UserInfo UserInfo{get;set;}
}
  注:区别在于,我们给teacherName属性加了一个长度限制。
  接下来,我们将开始持久化此model至数据库中(我们现在只是对属性作修改,此时数据库中此字段的长度为nvarchar(max),并不是nvarchar(10))
  1:在config中配置数据库连接:
  <connectionStrings>
  <add name="TestUsersDB" connectionString="Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=TestUsersDB;Data Source=XCL-PC\SQLEXPRESS" providerName="System.Data.SqlClient" />
  </connectionStrings>
  2:打开NuGet控制台:
 3:运行命令Enable-Migrations
  可能会出现如下错误:
  Checking if the context targets an existing database...
  Detected database created with a database initializer. Scaffolded migration '201212090821166_InitialCreate' corresponding to existing database. To use an automatic migration instead, delete the Migrations folder and re-run Enable-Migrations specifying the -EnableAutomaticMigrations parameter.
  Code First Migrations enabled for project MvcApplication1.
  此时项目会出现如下文件夹:
  打开configuation.cs,将作出如下修改:
  public Configuration()
  {
  AutomaticMigrationsEnabled = true;
  }
  再次执行Update-Database:
  因为我把长度从max改为10,在更新数据结构时,它认为此操作会导致数据丢失,如下:
  Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
  No pending code-based migrations.
  Applying automatic migration: 201212090848057_AutomaticMigration.
  Automatic migration was not applied because it would result in data loss.
  如果确保没事,只需给此命令加个强制执行的参数即可:
  Enable-Migrations -Force
  最后再次执行:Update-Database
  数据库中的原数据也没有丢失!

posted @ 2014-07-21 09:55 顺其自然EVO 阅读(340) | 评论 (0)编辑 收藏

Java加密算法研究

     摘要: ●  BASE64 严格地说,属于编码格式,而非加密算法  ●  MD5(Message Digest algorithm 5,信息摘要算法)  ●  SHA(Secure Hash Algorithm,安全散列算法)  ●  HMAC(Hash Message Authentication Code,散列消息...  阅读全文

posted @ 2014-07-21 09:53 顺其自然EVO 阅读(251) | 评论 (0)编辑 收藏

初试selenium用python做自动化测试

 搭建平台windows
  准备工具如下:
  -------------------------------------------------------------
  下载python
  http://python.org/getit/
  下载setuptools 【python 的基础包工具】
  http://pypi.python.org/pypi/setuptools
  下载pip 【python 的安装包管理工具】
  https://pypi.python.org/pypi/pip
  1、python 的安装,这个不解释,exe 文件运行安装即可,既然你选择python,相信你
  是熟悉python 的,我安装目录C:\Python27
  2、setuptools 的安装也非常简单,同样是exe 文件,默认会找到python 的安装路径,
  将安装到C:\Python27\Lib\site-packages 目录下
  3、安装pip ,我默认解压在了C:\pip-1.3.1 目录下
  4、打开命令提示符(开始---cmd 回车)进入C:\pip-1.3.1目录下输入:
  C:\pip-1.3.1 > python setup.py install
  (如果提示python 不是内部或外部命令!别急,去配置一下环境变量吧)
  5、再切换到C:\Python27\Scripts 目录下输入:
  C:\Python27\Scripts > easy_install pip
  6、安装selenium,(下载地址: https://pypi.python.org/pypi/selenium )
  如果是联网状态的话,可以直接在C:\Python27\Scripts 下输入命令安装:
  C:\Python27\Scripts > pip install -U selenium
  7. 下载解压,你会得到一个chromedriver.exe 文件,把这个文件放到
  chrome 的安装目录下...\Google\Chrome\Application\ ,然后设置path 环境变量,把
  chrome 的安装目录(我的:C:\Program Files\Google\Chrome\Application)
  然后测试
#encoding: utf-8
import os
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
chormedriver = "C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chromedriver.exe"
#打开IE浏览器
#iedriver = "C:\Program Files\Internet Explorer\IEDriverServer.exe"
#os.environ["webdriver.ie.driver"] = iedriver
#打开谷歌浏览器
os.environ["webdriver.chrome.driver"]= chormedriver
browser = webdriver.Ie(chormedriver)
browser.maximize_window()
browser.get("http://www.51.la/")
#assert "Python" in driver.title
elem = browser.find_element_by_id("uname")  #根据id定位到节点
elem.send_keys("xxxx")  #向文本框添加内容
elem = browser.find_element_by_id("upass")  #同上
elem.send_keys("xxxxx")   #同上
browser.find_element_by_class_name("btlogin").click()  #点击提交按钮
browser.find_element_by_link_text("查看统计报表").click()
browser.find_element_by_link_text("访问明细").click()
browser.find_element_by_link_text("下载当前报表").click()
  方法详见API,重点在节点的定位上,有多种定位方法。

posted @ 2014-07-21 09:43 顺其自然EVO 阅读(1386) | 评论 (0)编辑 收藏

前端网络(性能)监测工具 berserkJS

berserkJS 是基于 Qt (C++跨平台库)开发的前端网络(性能)监测工具。 它的核心功能是通过内置 webkit 收集由页面实际网络请求相关数据。 偏重于页面上线前检测与评估。
  页面性能分析工具,可用 JS 编写自己的检测、分析规则。 基于 Qt 开发,可跨平台编译,部署。内置基于 QtWebkit 的浏览器环境。 源码需在目标系统中编译后,可产生运行于 Windows / Linux / Mac 系统的可执行文件。 工程中自带 Window 系统中动态编译的可执行文件,此文件位于 bulid 目录下。
  使用案例
  无界面浏览器测试:在不依赖本地任何浏览器的情况下,运行测试框架,如 QUnit,Capybara, QUnit, Mocha, WebDriver, YUI Test, BusterJS, FuncUnit, Robot Framework 等。
  页面自动化:可以无障碍访问和操作网页的标准 DOM API 以及页面所用 JS 变量、对象、属性等内容。
  屏幕捕获:以编程方式获取网页全部或部分内容,可根据 Selector 截取指定 DOM 元素渲染情况;包括 CSS,SVG 和 Canvas。可将截取图片 base64 化,以便发送给远端服务器保存。
  网络监控:自动化的网络性能监控,跟踪页面所有资源加载情况并可简便的将输出结果格式化为标准HAR格式。
  页面性能监控:自动化的页面渲染监控,可获取 CPU、 内存使用情况数据,根据页面整体情况可简便的输出首次渲染时间、首屏渲染时间等关键数据。
  工具特性
  跨平台性:基于 Qt 开发,可跨平台编译,部署。内置基于 QtWebkit 的浏览器环境。源码需在目标系统中编译后,可产生运行于 Windows / Linux / Mac 系统的可执行文件。
  功能性:工具内置 webkit 浏览器内核,可响应浏览器内核事件回调、支持发送鼠标消息给浏览器、包装浏览器网络请求数据为JS数据格式、可与浏览器内JS做数据交互。
  开放性:工具将主要操作均包装为JS语法与数据格式,采用JS语法包装,前端工程师可根据API组装出符合各自预期的检测功能。
  接口性:工具本身支持命令行参数,可带参调用。API支持处理外部进程读取输出流、支持HTTP发送数据。可由 WEB 程序远程调用后获取测试的返回结果。
  标准性:完全真实的浏览器环境内 DOM,CSS,JavaScript,Canvas,SVG 可供使用,绝无仿真模拟。
  特点差异
  与 PhantomJS 相比具有以下不同:
  API 简易: 更直接的 API,如获取网络性能数据,仅需 3 行代码,而非 PhantomJS 的几十行,且信息量比 PhantomJS 丰富。
  API 标准化: 常用 API 均采用 W3 规范标准命名,事件处理代码可重复绑定而不相互覆盖,可以无缝兼容 Wind.JS 等异步流程处理库来解决自动化时异步流程控制问题。
  页面性能信息丰富:具有页面渲染和 CPU、 内存使用情况数据获取能力,可输出首次渲染时间、首屏渲染时间等页面性能关键数据。
  调试便利: 具有 GUI 界面与命令行状态两种形式,开发调试期可使用 GUI 模式定位问题,此模式中可开启 WebKit 的 Inspector 工具辅助调试页面代码与 DOM 。实际运行时可开启命令行状态避免自动执行时 GUI 界面干扰。
  应用企业
  新浪微博:已使用 berserkJS 构建前端性能监测数据分析平台,防止微博主要产品在不停开发迭代时,页面性能产生退化。
  Cisco: 用于 WebEx 项目的自动化测试

posted @ 2014-07-21 09:43 顺其自然EVO 阅读(275) | 评论 (0)编辑 收藏

重新定义Bug的三维

  重新定了一下bug的三维,增加影响范围。
  三维bug定义,bug三维:严重程度,处理优先级,影响范围。
  1.Bug严重程度。由Bug的创建者视情况来指定,其中1为最严重的问题,4为最小的问题。
  一般来讲,1级为系统崩溃或者数据丢失的问题;2级为主要功能的问题;3级为次要功能的问题;4级为细微的问题。
  2.Bug处理优先级。由Bug的处理人员按照当前业务需求、开发计划和资源状态指定,其中1的优先级最高,4的优先级最低。
  一般来讲,1级为需要立即解决的问题;2级为需要在指定时间内解决的问题;3级为项目开发计划内解决的问题;4级为资源充沛时解决的问题。
  3.Bug影响范围。由Bug的创建者视情况来指定,其中1为影响范围最大的问题,4为影响范围最小的问题。
  一般来讲,1级为直接阻碍整个系统或项目测试继续的版本BUG,如环境问题,性质定为整个项目延迟提测,可顺延测试时间;2级为直接阻碍模块或子系统功能测试继续的BUG,如,刚点一下功能就报错,该功能测试流程完全走不通,无法继续测试,性质定为部分功能延迟提测,可顺延测试时间;3级为间接影响部分功能模块继续测试的BUG,性质定义为降低测试执行效率,可根据该类BUG的数量,修复效率适当顺延测试时间。4级为几乎不影响测试进度,可忽略对测试进度的影响。

posted @ 2014-07-21 09:42 顺其自然EVO 阅读(176) | 评论 (0)编辑 收藏

我对测试的理解的变迁过程

  从入行一开始就决定了不走技术路线,因为游戏之所以是游戏是因为其游戏性而不是技术性,我爱的是游戏,而不是技术。
  1:刚入行的时候:找严重bug,或者操作步骤很多的bug,很有成就感,因为找到别人找不到的bug
  2:后来意识到,基础的简单的bug价值不见得比严重的难找的bug价值低,开始转向追求覆盖、不漏基础简单的bug
  3:开始关注流程,流程可以减少人为失误导致的bug,开始关注预防bug,特别是通过流程来预防人为bug
  4:认为流程最重要,几乎所有的bug都可以通过流程来预防和解决
  5:认为测试最重要,要掌控流程和版本发布的决定权
  6:开始认识到信息的重要性,认为测试的职责是提供产品信息,而不是自己掌控决定权
  7:开始认识到,测试要做的太多,不可能全部做到,要做取舍
  8:测试是辅助,不仅仅辅助产品,而且要辅助团队;团队重要性高于项目
  9:测试不仅仅要提供产品的信息,也要提供人的信息,团队的信息

posted @ 2014-07-21 09:41 顺其自然EVO 阅读(174) | 评论 (0)编辑 收藏

一个小时内学习SQLite数据库

  1. 介绍
  SQLite 是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的SQL数据库引擎。 其特点是高度便携、使用方便、结构紧凑、高效、可靠。 与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下 - 只要确保SQLite的二进制文件存在即可开始创建、连接和使用数据库。如果您正在寻找一个嵌入式数据库项目或解决方案,SQLite是绝对值得考虑。
  2. 安装
  SQLite on Windows
  1)进入 SQL 下载页面:http://www.sqlite.org/download.html
  2)下载 Windows 下的预编译二进制文件包:
  sqlite-shell-win32-x86-<build#>.zip
  sqlite-dll-win32-x86-<build#>.zip
  注意: <build#> 是 sqlite 的编译版本号
  将 zip 文件解压到你的磁盘,并将解压后的目录添加到系统的 PATH 变量中,以方便在命令行中执行 sqlite 命令。
  可选: 如果你计划发布基于 sqlite 数据库的应用程序,你还需要下载源码以便编译和利用其 API
  sqlite-amalgamation-<build#>.zip
  SQLite on Linux
  在 多个 Linux 发行版提供了方便的命令来获取 SQLite:
  /* For Debian or Ubuntu /*
  $ sudo apt-get install sqlite3 sqlite3-dev
  /* For RedHat, CentOS, or Fedora/*
  $ yum install SQLite3 sqlite3-dev
  SQLite on Mac OS X
  如果你正在使用 Mac OS 雪豹或者更新版本的系统,那么系统上已经装有 SQLite 了。
  3. 创建首个 SQLite 数据库
  现在你已经安装了 SQLite 数据库,接下来我们创建首个数据库。在命令行窗口中输入如下命令来创建一个名为 test.db 的数据库。
  sqlite3 test.db
  创建表:
  sqlite> create table mytable(id integer primary key, value text);
  2 columns were created.
  该表包含一个名为 id 的主键字段和一个名为 value 的文本字段。
  注意: 最少必须为新建的数据库创建一个表或者视图,这么才能将数据库保存到磁盘中,否则数据库不会被创建。
  接下来往表里中写入一些数据:
  sqlite> insert into mytable(id, value) values(1, 'Micheal');
  sqlite> insert into mytable(id, value) values(2, 'Jenny');
  sqlite> insert into mytable(value) values('Francis');
  sqlite> insert into mytable(value) values('Kerk');
  查询数据:
  sqlite> select * from test;
  1|Micheal
  2|Jenny
  3|Francis
  4|Kerk
  设置格式化查询结果:
sqlite> .mode column;
sqlite> .header on;
sqlite> select * from test;
id          value
----------- -------------
1           Micheal
2           Jenny
3           Francis
4           Kerk


 .mode column 将设置为列显示模式,.header 将显示列名。
  修改表结构,增加列:
  sqlite> alter table mytable add column email text not null '' collate nocase;;
  创建视图:
  sqlite> create view nameview as select * from mytable;
  创建索引:
  sqlite> create index test_idx on mytable(value);
  4. 一些有用的 SQLite 命令
  显示表结构:
  sqlite> .schema [table]
  获取所有表和视图:
  sqlite > .tables
  获取指定表的索引列表:
  sqlite > .indices [table ]
  导出数据库到 SQL 文件:
  sqlite > .output [filename ]
  sqlite > .dump
  sqlite > .output stdout
  从 SQL 文件导入数据库:
  sqlite > .read [filename ]
  格式化输出数据到 CSV 格式:
  sqlite >.output [filename.csv ]
  sqlite >.separator ,
  sqlite > select * from test;
  sqlite >.output stdout
  从 CSV 文件导入数据到表中:
  sqlite >create table newtable ( id integer primary key, value text );
  sqlite >.import [filename.csv ] newtable
  备份数据库:
  /* usage: sqlite3 [database] .dump > [filename] */
  sqlite3 mytable.db .dump > backup.sql
  恢复数据库:
  /* usage: sqlite3 [database ] < [filename ] */
  sqlite3 mytable.db < backup.sql

posted @ 2014-07-18 10:01 顺其自然EVO 阅读(163) | 评论 (0)编辑 收藏

网站性能测试工具—ApacheBench

  对于网站性能测试来说,一般我们会使用loadrunner来实现,而它过于庞大,使我们感到有些不爽,而今天介绍的ApacheBench工具,它小而精,使用简单,效果直观,可以说,是比lr更好用的性能测试工具.
  下面介绍几个概念
  1:吞吐率(Requests per second)
  服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。
  记住:吞吐率是基于并发用户数的。这句话代表了两个含义,1:吞吐率和并发用户数相关;2:不同的并发用户数下,吞吐率一般是不同的。
  计算公式:总请求数  / 处理完成这些请求数所花费的时间,即
  Request per second = Complete requests  / Time taken for tests
  2:并发连接数(The number of concurrent connections)
  并发连接数指的是某个时刻服务器所接受的请求数目,简单的讲,就是一个会话。
  3:并发用户数(The number of concurrent users,Concurrency Level)
  要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数。在HTTP/1.1下,IE7支持两个并发连接,IE8支持6个并发连接,FireFox3支持4个并发连接,所以相应的,我们的并发用户数就得除以这个基数。
  下面主要说一下它的几个主要的参数
  运行参数
  请求为100,并发为10,命令如下:ApacheBench -n100 -c10 http://uri
  运行结果
Benchmarking www.cnblogs.com (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Finished 1000 requests
Server Software:
Server Hostname:        www.cnblogs.com
Server Port:            80
Document Path:          /
Document Length:        45373 bytes
Concurrency Level:      10
Time taken for tests:   45.299591 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      45679011 bytes
HTML transferred:       45373000 bytes
Requests per second:    22.08 [#/sec] (mean)
Time per request:       452.996 [ms] (mean)
Time per request:       45.300 [ms] (mean, across all concurrent requests)
Transfer rate:          984.73 [Kbytes/sec] received
Connection Times (ms)
min  mean[+/-sd] median   max
Connect:       26   44 189.5     31    3035
Processing:    89  405 583.3    284    5190
Waiting:       30  143 344.6     97    5031
Total:        116  450 611.7    315    5224
Percentage of the requests served within a certain time (ms)
50%    315
66%    322
75%    331
80%    343
90%    408
95%    549
98%   3333
99%   3375
100%   5224 (longest request)

posted @ 2014-07-18 10:00 顺其自然EVO 阅读(245) | 评论 (0)编辑 收藏

仅列出标题
共394页: First 上一页 81 82 83 84 85 86 87 88 89 下一页 Last 
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜