2020-08-23 18:01:43    93    0    0

服务器配置

web服务器

  • 8:00 4台
  • 9:00 8台
  • 9:52 12台

socket服务器

  • 8:00 2台
  • 9:00 4台
  • 9:32 6台
  • 9:45 8台
  • 9:52 12台
  • 11:00 24台

推广时期各资源状况

DDo高防数据

4个带宽峰值时间分别是8:55,9:45,10:15和10:25
带宽

5个并发峰值时间分别是9:00,9:45,10:15,10:25和10:45
title

Waf防火墙

title
title

SLB

web

title
title

socket

title
title

ECS

web

title
title
title
title

socket

title
title
title

RDS (高可用版)

写库

title
title

读库

title
title

Redis (8G集群版4节点)

title

Mongodb

title

2020-07-25 15:00:56    127    0    0

测试能力等级划分
最近看一本书,上面说到测试工程师随着工作经验的提高,能力也会提高,但是有时候也会问自己,工作三年与工作四年的区别在哪里,书上对测试工程师分了几种等级,等级与技术无关,与测试方法与测试经验有很大的关系。在此总结出来,再加上自己的理解,基本能解决心中一直以来的困惑。

测试一级
能根据测试用例描述的步骤来执行测试用例,能对照用例的预期结果发现产品的问题,能够将问题清晰想记录下来反馈给开发,开发能够读懂bug的含义。

个人理解:执行用例的tester,只有大型的公司或外包公司才会有这种岗位,一般公司都会要求写测试用例的。

测试二级
对产品需求有一定理解,能够根据产品需求设计产品的测试用例,发现问题后能进行初步定位。

个人理解:这条涉及到两方面的能力。
1、独立编写测试用例的能力。
2、发现问题后能大概判断出是哪里的问题,这个定位不是代码级别的定位,而是功能模块方面的定位。就好比我测试一个系统,由a、b、c、组成,a出了问题,能判断是数据经过b时处理错误了还是经过c时处理错误了。但是这个能力需要你对被测试的产品有很深的理解,对于跳槽就基本等于换行业的IT技术来说,这个能力通俗点讲应该叫“上手速度快”。这个应该算是合格的测试工程师的基本能力。

测试三级
对产品的需求和实现都有较为深入的理解,设计用例时会注意用例的有效性,测试用例时会考虑使用自动化测试等方法提升测试执行的效率;

个人理解:编写测试用例时不再是严格按照规范来编写,而是会根据被测产品,找出测试重点来有针对性的编写测试用例,而其他的一些不太重要的地方则大概写一些测试case来提醒自己不要漏测就好。自动化方面小规模做还行,大规模得要领导与公司的支持,毕竟也要投入人力与时间。

测试四级
深入理解产品需求和实现,理解产品质量,理解产品的隐形需求,对产品性能、可靠性、易用性等非功能属性的测试均有所涉及,并掌握其中的测试方法,会使用测试缺陷分析技术,会评估产品质量;

个人理解:不明白具体的是什么能力

测试五级
不断追求最适合产品的测试技术,关注测试过程改进,推动产品测试技术的进步;

个人理解:不断学习新的技术,关注测试过程,应该根据每次的测试结果来

2020-06-13 17:42:14    58    0    0

环境

ECS:4 vCPU 8 GiB
php-fpm配置

  1. pm = dynamic
  2. pm.max_children = 100
  3. pm.start_servers = 11
  4. pm.min_spare_servers = 8
  5. pm.max_spare_servers = 16
  6. pm.max_requests = 2048
  7. pm.process_idle_timeout = 10s
  8. request_terminate_timeout = 120
  9. request_slowlog_timeout = 2

一台ECS
2001400并发的时候开始出现故障,1800的时候完成全部失败,请求成功率57.51%(120541/89051)
title

弹性伸缩
自动伸缩增加机器的时候会出现异常
title

没有弹性伸缩2台ECS,请求成功率67.15%(144956/70903)详情
title

没有弹性伸缩4台ECS,请求成功率88.57%(316114/40810)详情
title

结论:
并发1300的时候会出现4分异常

2019-11-10 17:59:38    63    0    0

安装

安装nginx

  1. yum -y install nginx

yum install nginx 时报错:No package nginx available.
先安装epel:

  1. yum install epel-release

查看

  1. ps -aux | grep nginx

安装php

  1. yum install -y php72w php72w-opcache php72w-xml php72w-mcrypt php72w-gd php72w-devel php72w-mysql php72w-intl php72w-mbstring
  2. yum -y install php php-mysql php-cgi php-mbstring php-gd php-fastcgi

安装spawn-fcgi来运行php-cgi

  1. yum install spawn-fcgi

下载spawn-fcgi 的启动脚本

  1. wget http://bash.cyberciti.biz/dl/419.sh.zip ;
  2. unzip 419.sh.zip
  3. mv 419.sh /etc/init.d/php_cgi
  4. chmod +x /etc/init.d/php_cgi

启动php_cgi

  1. /etc/init.d/php_cgi start

查看进程

  1. netstat -tulpn | grep :9000

若出现如下代表一切正常

  1. tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 4352/php-cgi

设置

开机启动

  1. chkconfig nginx on

跨域

  1. add_header Access-Control-Allow-Origin *;
  2. add_header Access-Control-Allow-Headers X-Requested-With;
  3. add_header Access-Control-Allow-Methods GET,POST,OPTIONS;

配置文件

  1. worker_processes 8; # nginx 进程数,建议按照cp
2019-04-02 19:36:28    89    0    0

什么是事件?

事情大概是这样的,需求要在用户注册的时候发一些帮助邮件给用户(原本用户在注册之后已经有发别的邮件的了,短信,IM什么的)

原来这个注册的方法也就10多行代码。但是有时候我们为了省事,直接在注册代码后面添加了各种代码。

例如这个注册方法本来是这样的

  1. <?php
  2. namespace App\Htt\Controllers;
  3. use Illuminate\Http\Request;
  4. class UserController extends Controller
  5. {
  6. public function register(Request $request)
  7. {
  8. //获取参数
  9. //验证参数
  10. //写入数据库
  11. //return 注册信息
  12. }
  13. }

现在有一个需求,要求注册之后给用户的邮箱发一个广告,绝大多数的人(也包括以前的我)就直接在这后面接着写代码了

  1. <?php
  2. namespace App\Htt\Controllers;
  3. use Illuminate\Http\Request;
  4. class UserController extends Controller
  5. {
  6. public function register(Request $request)
  7. {
  8. //获取参数
  9. //验证参数
  10. //写入数据库
  11. //发送广告邮件
  12. //return 注册信息
  13. }
  14. }

这是比较直观的写法,后来又有需求要发个短信。

  1. <?php
  2. namespace App\Htt\Controllers;
  3. use Illuminate\Http\Request;
  4. class UserController extends Controller
  5. {
  6. public function register(Request $request)
  7. {
  8. //获取参数
  9. //验证参数
  10. //写入数据库
  11. //发送广告邮件
  12. //发送短信
  13. //return 注册信息
2019-02-28 12:08:32    17    0    0

PHP数据库驱动简介

驱动是一段设计用来于一种特定类型的数据库服务器进行交互的软件代码。驱动可能会调用一些库。类似于Java中的数据库驱动的概念

  1. JDBC-ODPC桥:
    它将JDBC API映射到ODPC API。再让JDBC-ODPC调用数据库本地驱动代码(也就是数据库厂商提供的数据库操作二进制代码库,例如Oracle中的oci.dll)
  2. 本地API驱动
    直接将JDBC API映射成数据库特定的客户端API,即通过客户端加载数据库厂商提供的本地代码库(C/C++等)
  3. 网络协议驱动(主流)
    这种类型的驱动给客户端提供了一个网络API,客户端上的JDBC驱动程序使用套接字(Socket)来调用服务器上的中间件程序,后者在将其请求转化为所需的具体API调用。
  4. 本地协议驱动(主流)
    这种类型的驱动使用Socket,直接在客户端和数据库间通信。它是一种直接与数据库实例交互的JDBC
    这种驱动是智能的,它知道数据库使用的底层协议,也是目前最主流使用的JDBC驱动,我们本章的重点就是它

而对于PHP来说,同样主流使用的也是网络协议驱动、本地协议驱动,即MySQL客户端库、MySQL Native驱动库。 这些库实现了用于和MySQL数据库服务器进行交互的底层协议。
数据库驱动位于PHP和数据库进行通信的最底层,不同的数据库厂商都会在基于某个框架的前提下实现自己的驱动,用以提供基本功能、以及特定数据库的高级功能。

在驱动层之上是"连接器"、或者是适配器抽象层,用于PHP代码和数据库进行连接,程序员可以使用PDO(PHP Database Object)、或者直接使用扩展接口(mysql、mysqli)这些暴露出来的API与底层数据库进行通信。
title

数据库厂商提供的底层数据库驱动

Nodejs    2019-02-21 17:05:26    35    0    0

自从Node横空出世后,很快有人就用它来开发爬虫,网上也常见Node爬虫教程。然而,很难看到一个通用的、功能丰富的爬虫开源项目,到Github上找了一下找到这个,算是目前能找到的最好的了。

这里将它的文档翻译一下,期待更多的实用案例。

node-crawler
目标打造成Node社区最强大和流行的爬虫/内容抽取工具库,且支持生产环境。
特性:

  • 服务端DOM和自动jQuery注入,使用Cheerio(默认)或JSDOM
  • 可配置的连接池大小和重试次数
  • Control rate limit
  • 支持设置请求队列优先级
  • forceUTF8模式可让爬虫处理字符集编码探测和转换
  • 兼容Node 4.x及以上版本

更新日志:https://github.com/bda-research/node-crawler/blob/master/CHANGELOG.md

上手指南

安装

  1. $ npm install crawler

使用

  1. var Crawler = require("crawler");
  2. var c = new Crawler({
  3. maxConnections : 10,
  4. // 这个回调每个爬取到的页面都会触发
  5. callback : function (error, res, done) {
  6. if(error){
  7. console.log(error);
  8. }else{
  9. var $ = res.$;
  10. // $默认使用Cheerio
  11. // 这是为服务端设计的轻量级jQuery核心实现
  12. console.log($("title").text());
  13. }
  14. done();
  15. }
  16. });
  17. // 爬取一个URL,使用默认的callback
  18. c.queue('http://www.amazon.com');
  19. // 爬取URL列表
  20. c.queue(['http://www.google.com/','http://www.yahoo.com']);
  21. // 爬取页面,自
2019-02-21 11:14:03    26    0    0

  今天逛测试之道论坛,发现这篇文章,虽然标题是写着为了面试,但其中的理论知识对在座的同仁也会有很大的帮助!

01. 为什么要在一个团队中开展软件测试工作?

  因为没有经过测试的软件很难在发布之前知道该软件的质量,就好比ISO质量认证一样,测试同样也需要质量的保证,这个时候就需要在团队中开展软件测试的工作。在测试的过程发现软件中存在的问题,及时让开发人员得知并修改问题,在即将发布时,从测试报告中得出软件的质量情况。

02. 您在以往的测试工作中都曾经具体从事过哪些工作?其中最擅长哪部分工作? 

 
  我曾经做过web测试,后台测试,客户端软件,其中包括功能测试,性能测试,用户体验测试。最擅长的是功能测试

03. 您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性能测试……)

 测试类型有:功能测试,性能测试,界面测试。 
 功能测试在测试工作中占的比例最大,功能测试也叫黑盒测试。是把测试对象看作一个黑盒子。利用黑盒测试法进行动态测试时,需要测试软件产品的功能,不需测试软件产品的内部结构和处理过程。采用黑盒技术**设计测试用例的方法有:等价类划分、边界值分析、错误推测、因果图和综合策略。 

 性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。  

  界面测试,界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。而且设计良好的界面能够引导用户自己完成相应的操作,起到向导的作用。同时界面如同人的面孔,具有吸引用户的直接优势。设计合理的界面能给用户带来轻松愉悦的感受和成功的感觉,相反由于界面设计的失败,让用户有挫败感,再实用强大的功能都可能在用户的畏惧与放弃中付诸东流。  
  区别在于,功能测试关注产品的所有功能上,要考虑到每个细节功能,每个可能存在的功能问题。性能测试

2019-02-21 11:14:03    37    0    0

一.系统吞度量要素:

一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。

单个reqeust 对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。

系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间

QPS(TPS):每秒钟request/事务 数量

并发数: 系统同时处理的request/事务数

响应时间: 一般取平均响应时间

(很多人经常会把并发数和TPS理解混淆)

理解了上面三个要素的意义之后,就能推算出它们之间的关系:

  1. QPSTPS)= 并发数/平均响应时间

一个系统吞吐量通常由QPS(TPS)、并发数两个因素决定,每套系统这两个值都有一个相对极限值,在应用场景访问压力下,只要某一项达到系统最高值,系统的吞吐量就上不去了,如果压力继续增大,系统的吞吐量反而会下降,原因是系统超负荷工作,上下文切换、内存等等其它消耗导致系统性能下降。

决定系统响应时间要素

我们做项目要排计划,可以多人同时并发做多项任务,也可以一个人或者多个人串行工作,始终会有一条关键路径,这条路径就是项目的工期。

系统一次调用的响应时间跟项目计划一样,也有一条关键路径,这个关键路径是就是系统影响时间;

关键路径是有CPU运算、IO、外部系统响应等等组成。

二.系统吞吐量评估:

我们在做系统设计的时候就需要考虑CPU运算、IO、外部系统响应因素造成的影响以及对系统性能的初步预估。

而通常境况下,我们面对需求,我们评估出来的出来QPS、并发数之外,还有另外一个维度:日PV。

通过观察系统的访问日志发现,在用户量很大的情况下,各个时间周期内的同一时间段的访问流量几乎一样。比如工作日的每天早上。只要能拿到日流量图和QPS我们就可以推算日流量。

通常的技术方法:

  1. 找出系统的最高TPS和日PV,这两个要素有相对比较稳定的关系(除了放假、季节性因素影响之外)
  2. 通过压力测试或者经验预估,得出最高TPS,然后跟进1的关系,计算出系统最高的日吞吐量。B2B中文和淘宝面对的客户群不一样,这两个客户群的网络行为不应用,他们之间的TPS和PV关系比例也不一样。

A)淘宝

2019-02-21 11:14:03    32    0    0

一、经典公式1:

一般来说,利用以下经验公式进行估算系统的平均并发用户数和峰值数据
 
1. 平均并发用户数为 C = nL/T
2. 并发用户数峰值 C‘ = C + 3*根号C

C是平均并发用户数,n是login session的数量,L是login session的平均长度,T是值考察的时间长度
C’是并发用户数峰值
 
举例1,假设系统A,该系统有3000个用户,平均每天大概有400个用户要访问该系统(可以从系统日志从获得),对于一个典型用户来说,一天之内用户从登陆到退出的平均时间为4小时,而在一天之内,用户只有在8小时之内会使用该系统。
那么,
平均并发用户数为:C = 400*4/8 = 200
并发用户数峰值为:C‘ = 200 + 3*根号200 = 243

举例2, 某公司为其170000名员工设计了一个薪酬系统,员工可进入该系统查询自己的薪酬信息,但并不是每个人都会用这个系统,假设只有50%的人会定期用该系统,这些人里面有70%是在每个月的最后一周使用一次该系统,且平均使用系统时间为5分钟。
则一个月最后一周的平均并发用户数为(朝九晚五):
n = 170000*0.5*0.7/5 = 11900
C= 11900*5/60/8 = 124
 
吞吐量计算为:F = Vu * R / T 单位为个/s
F为事务吞吐量,Vu为虚拟用户数个数,R为每个虚拟用户发出的请求数,T为处理这些请求所花费的时间
 

二、通用公式2:

对绝大多数场景,我们用(用户总量/统计时间)*影响因子(一般为3)来进行估算并发量。
比如,以乘坐地铁为例子,每天乘坐人数为5万人次,每天早高峰是7到9点,晚高峰是6到7点,根据8/2原则,80%的乘客会在高峰期间乘坐地铁,则每秒到达地铁检票口的人数为50000*80%/(3*60*60)=3.7,约4人/S,考虑到安检,入口关闭等因素,实际堆积在检票口的人数肯定比这个要大,假定每个人需要3秒才能进站,那实际并发应为4人/s*3s=12,当然影响因子可以根据实际情况增大!
 

三、根据PV计算公式:

比如一个网站,每天的PV大概1000w,根据2/8原

11/12