Jaccorot 日事日毕日清日高

ARTS-009

2020-07-24

一、Algorithm

二、Review

三、Tip

python encode & decode

把str转化为Bytes

由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes

>>> 'ABC'.encode('ascii')
b'ABC'
>>> 'ABC'.encode('utf-8')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
>>> '中文'.encode('ascii')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
  • 纯英文的str可以用ASCII编码为bytes,内容是一样的,
  • 含有中文的str可以用UTF-8编码为bytes。
  • 含有中文的str无法用ASCII编码,因为中文编码的范围超过了ASCII编码的范围,Python会报错。

把Bytes变为str

如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法

>>> b'ABC'.decode('ascii')
'ABC'
>>> b'ABC'.decode('utf-8')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'

python base64

import base64

content = "hello world"
e_content = content.encode()
print(e_content)
# >> b'hello world'

encoded_content = base64.b64encode(e_content)
print(encoded_content)
# >> b'aGVsbG8gd29ybGQ='

d_content = encoded_content.decode()
print(d_content)
# >> aGVsbG8gd29ybGQ=

decoded_content = base64.b64decode(d_content)
print(decoded_content)
# >> b'hello world'

python2 编码文件头

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;

第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

mysql limit

SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1)

mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15

//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1: 
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.

//如果只给定一个参数,它表示返回最大的记录行数目: 
mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行

//换句话说,LIMIT n 等价于 LIMIT 0,n。

性能测试

服务端:

  1. 软件:最大线程数、缓存的设置、连接池、线程池。。。
  2. 硬件:
    • CPU使用率: CPU使用率、CPU队列长度
    • 内存使用率:可用内存量、页交换频率(内存与硬盘之间交换数据的频率)
    • 硬盘使用率:硬盘使用率、硬盘队列长度
    • 网卡流量:接收到的数据、发送出去的数据(吞吐量 I/O)

分类

  • 负载测试:用于评估最佳用户数,确定最大用户数
  • 压力测试:利用大于最大用户的负载进行测试
  • 稳定性测试:标准用户、长时间、真场景
  • 并发测试:模拟同时发请求
  • 容量测试:模拟后台服务器端的大容量,数据库、硬盘、内存

约定

  • 响应时间:2-5-8 : 2秒内合理;5秒内能接受;8秒最大时限;
  • 资源利用率75% 以内

jmeter

  • jmeter客户端配置:

在jmeter.properties中指定remote-host即可。其中1099是jmeter server默认的服务端口 。

  • 命令行下远程分布式压力测试:

测试命令说明

 ./jmeter -n -t 压力测试.jmx -r -l results.jtl

n表示无GUI运行 t表示要运行的jmx文件 l指生成的文件名称 r指远程将所有agent启动

  • 同时生成测试报告的命令为:
./jmeter -n -t 压力测试.jmx -r -l results.jtl -e -o /tmp/ResultReport

-e :在脚本运行结束后生成html报告 -o :用于存放html报告的目录

  • beanshell
  1. log 日志记录log.info()

  2. vars 操作jmeter变量 vars.put(“jmeter_vars”, input_vars) # 把数据存入jmeter变量 vars.get(“jmeter_vars”) # 从jmeter获取变量

  3. props 操作jmeter属性,实际引用了jmeter的配置信息,可以获取jmeter的属性,操作与vars类似。 但是只能put进去String类型,不能是对象 props.get(“TIMER.FACTOR””) props.put(“PROP1”,”abcde”)

  4. prev 获取前面取样器的结果 prev.getResponseDataAsString(); // 获取响应信息 prev.getResponseCode(); //获取响应状态码

//BeanShell Assertion
import org.json.JSONArray;
import org.json.JSONObject;

String response = prev.getResponseDataAsString(); 
JSONArray ja = new JSONArray(response); // 利用JSONArray对象来实例化JSON数据
int jsonLen = ja.length();

for (int i=0; i<jsonLen; i++){
    JSONObject jo = ja.getJSONObject(i);
    log.info("===="+ jo.get("customerphone"));
}

JSONObject jo2 = ja.getJSONObject(0);
vars.put("customerphone", jo.get("customerphone"));


if (jsonLen >2){
    Failure = true;
    FailureMessage = " 查询到" + jsonLen + "条";
}

四、Share

软件测试价值提升之路 - 五

1. 探索式测试 vs 脚本式测试

探索式测试应用中也有很多需要注意的问题,例如:不同的人有不同的效果,管理者要有准确的预期。

  • 新人,可以期望他加深了对产品和测试的理解;
  • 经验丰富的人,可以通过他确认重要的影响因素在设计中已经都考虑到了;
  • 善于发散思维的人,可以期望他发现较多严重的缺陷;
  • 善于系统思维的人,可以期望他给出质量方面的结论。

不同的测试效果是由不同的思维习惯和知识结构决定的。这也是为什么在实践中,通常都是把探索式测试和剧本式测试结合起来,解决特定的质量风险,用特定的方法、特定的人去做。

2. 测试设计 vs 自动化

选择先发展自动化还是测试设计,需要抓住两条:

  • 第一,自动化侧重工具能力建设,测试设计侧重人的能力建设,原则上优先改进短板;
  • 第二,根据对问题的分析选择合适的路径,测试团队进行能力建设的契机,通常出现在产品质量出了问题的时候,原则上新开发的功能缺陷多优先改进测试设计;老功能缺陷多优先改进自动化。

自动化和测试设计,并不是非此即彼的选择,更理想的方式是,对问题进行分析,对测试设计进行改进,进而设计无需人工介入的方法,最后实现自动化验证.

项目管理人眼中:进度>成本>质量

3. 测试成长:

产品业务测试专才 : 新人-》特性质量保障-》项目质量保障-》产品质量保障-》测试专家 入门 -》 独立工作-》 广度拓展 -》 能力养成 -》 影响力发挥

工程能力提升和个人能力建设

4. 职业思维:

测试人员的职业习惯-只看到问题。人们更喜欢…听到解决建议。因此,采用问题+建议的方式提出自己的意见,是测试工程师需要掌握的常用工作技巧之一。


Similar Posts

上一篇 ARTS-008

下一篇 ARTS-010