Test 01:Introduction

1.测试金字塔

被引用较多的关于测试的文章 -> 测试金字塔实战

认识:

  • 1、unit单元测试,速度快,且成本低(当然这里的成本低,是指可以前移测试早发现问题,缺陷修复代价来讲,但从目前如果开发要强制单元测试,成本其实并不低,影响因素也众多)
  • 2、ui端到端测试,速度慢,且成本高(与上面解释类似)
  • 3、Service集成和接口测试,处于二者中间,其实这块我认为是测试收益最大,且最容易有成果和成效的部分;
  • 4、自动化测试金字塔模型还给我们的启示是,如果在进行ui测试时,发现缺陷,有可能是你的中间service层或是unit层有缺陷,我们应追朔本源,解决问题根据原因所在。

不要太拘泥于测试金字塔中单个层的名称。只是一个抽象概念

2.测试分类

测试类型按照不同维度可以有很多种分类,比如说

  • 1.基于是否考虑软件内部结构和实现
    • 白盒测试
    • 黑盒测试
    • 灰盒测试
  • 2.基于是否执行程序
    • 静态测试
    • 动态测试
  • 3.基于测试过程
    • 单元测试
    • 集成测试
    • 冒烟测试
    • 功能测试(系统测试)
      • 探索式测试
      • 场景测试
      • 流测试
      • 域测试
    • 兼容性测试
    • 回归测试
    • 验收测试
    • 性能测试
      • 压力测试
      • 负载测试
    • 安全测试

大牛的测试文章这里;还有微服务相关的测试,微服务测试的思考与实践;还有测试左移,测试右移

shell 玩转sed,你不知道的用法

sed 是 stream editor(流编辑器)的缩写

操作 作用
p 打印文本行(print)
n 取消默认输出
d 删除(delete)
s 字符串替换(substitude)
a 追加新的文本(append)

示例文件

1
2
3
4
5
6
7
# cat example.conf
username=this username_2=this
password=that

url=this

path=this

1.替换

sed 命令会将 s 之后的字符视为命令分隔符,这允许我们更改默认的分隔符,如:
sed 's:this:new:g' example.conf
sed 's|this|new|g' example.conf
如果作为分隔符的字符出现在模式中,必须使用 \对其进行转义

sed 's/this/new/' example.conf 替换 每行首次 匹配的内容

ouput:

1
2
3
4
5
6
username=new  username_2=this
password=that

url=new

path=new

sed 's/this/new/g' example.conf g标记可以使sed执行全局替换

sed 's/this/new/2g' example.conf #g可以使sed替换第N次出现的匹配

将1-4行的url换成address, s代表替换
sed '1,4s/url/address/g' example.conf

2.删除

sed '2,4d' example.conf 删除第2到4行

sed -e '/url/d' example.conf 删除含”url”的行,输出到终端,实际没有替换文件

sed '/appleapple/d;$d' example.conf 删除包含appleapple的行和最后一行($)

移除空行
sed '/^$/d' file 空行可以用 ^$ 进行匹配,最后的 /d 告诉sed不执行替换操作,而是直接删除匹配到的空行

检查替换内容
sed -n 's/mysql_host_key/mysql_host_key_new/g'p test-application.yml

-n停止修改后的文本的输出。然后使用p打印修改后的行

macOS 不一样的 sed

报错如下

1
2
sed -i 's/mysql_host_key/mysql_host_key_new/g'  test-application.yml
sed: 1: "test-application.yml": undefined label 'est-application.yml'

原因: The sed command is a bit different in Mac OS X, the ‘-i’ option required a parameter to tell what extension to add for the backup file.

解决办法:
sed -i '.bak' 's/mysql_host_key/mysql_host_key_new/g' test-application.yml

参见 https://mkyong.com/mac/sed-command-hits-undefined-label-error-on-mac-os-x/


✍TIP

  1. 首先使用不带 -i选项的sed命令,查看结果是否符合预期;再加入 -i选项将更改写入文件。

  2. sed -i.bak 's/abc/def' file 这时的sed不仅替换文件内容,还会创建一个名为file.bak的文件,其中包含着原始文件内容的副本;如果对一个文件多次执行,则xx.bak文件只会是上一个文件的副本

shell 没有vim/vi 命令怎么办

由于经常在容器中有一些debug的操作,想要编辑文件,却又发现 一无所有(没有 vim/vi 编辑命令)。解决办法可能是去安装,但下载需要时间等待,且下载的工具使用也不是很频繁。所以换个思路,用其他基础的命令替代下。

cat EOF 常用方法

1
2
3
4
5
# cat <<EOF > cat_test.sh
> #!/bin/bash
> echo "no vim/vi"
> echo "But ... cat"
> EOF

可以用 cat cat_test.sh 核验下内容和格式是否正确;如果原文件存在且有内容,会直接 覆盖

追加 内容

1
2
3
4
# cat <<EOF >> cat_test.sh
> #!/bin/bash
> echo "new add context"
> EOF

cat交互模式下的使用

1
2
3
# cat > cat_in.sh
#!/bin/bash
echo "by cat."

ctrl + d 结束输入


✍TIP

  1. 直接清空文件: >cat_test.sh

  2. 其实可以用其他字符来代替EOF,它也只是个标识符而已!

shell shift用法

参数 描述
$0 命令本身
$1,$2… 第1个参数、第2个参数……
$# 参数的个数,不包括$0
$@ 以列表的形式返回参数列表,不包括$? 最后运行的命令结束代码

Example 1

shift_test.sh

1
2
3
4
5
6
7
cat shift_test.sh
#!/bin/bash
while [ $# != 0 ]
do
echo "prama is $1,prama size is $#"
shift
done

运行结果如下:

1
2
3
4
# ./shift_test.sh a b c
prama is a,prama size is 3
prama is b,prama size is 2
prama is c,prama size is 1

Example 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 # cat img_downloader.sh
#!/bin/bash

if [ $# -ne 3 ];
then
echo "Usage: $0 URL -d DIRECTORY"
exit 1
fi

while [ $# -gt 0 ]
do
case $1 in
-d) shift; directory=$1; shift ;;
*) url=$1; shift;;
esac
done

echo "directory is :$directory"
echo "url is :$url"

运行结果如下:

1
2
3
4
5
6
 # ./img_downloader.sh -d images baidu.com
directory is :images
url is :baidu.com
# ./img_downloader.sh baidu.com -d images
directory is :images
url is :baidu.com

采用这种方法解析命令行参数的好处在于可以将 -d 置于命令行中的任意位置

kubectl 常用命令

label操作

删除 label version=xx

kubectl label pod webui-746df859ff-z5fwt version-

添加 label
kubectl label pods labelex owner=michael

deploy操作

kubectl create delpoy [deploy_name] --image=nginx

kubectl create deployment httpenv --image=iasonliu/httpenv

kubectl run [pod_name] –image=busybox

example:
kubectl run pingpong --image=alpine ping 1.1.1.1 or kubectl run pingpong2 --image alpine ping 1.1.1.1

当我们使用 kubectl run something启动deplyment的时候,label会是 run=something

kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1

service操作

为webui创建service
kubectl expose deploy/webui --type=NodePort --port=80

log操作

查看deploy日志
kubectl logs deploy/pingpong

查看pod日志
kubect logs [ pod_name]

或者脚本

1
2
3
4
5
6
7
8
9
#!/usr/bin/env bash
DEPLOYMENT=$1

for p in $(kubectl get pods | grep ^${DEPLOYMENT}- | cut -f 1 -d ' '); do
echo ---------------------------
echo $p
echo ---------------------------
kubectl logs $p
done

批量sacle

kubectl get deploy -n <YOUR_NAMESPACE> -o name | xargs -I % kubectl scale % --replicas=0 -n <YOUR_NAMESPACE>


More Ref:

devops 4大支柱

一、个人感想

书中的标题看起来总是“高大上”的,但说出来的都是一些无形的东西,要理解这类理念需要时间的积累。这里先摘抄几句,一起“品味”一下。其中许多文化、方法论与现在的外企公司比较吻合,相对理解起来容易些; 书中涉及到了很多细节,比如 招聘和面试(p250), 当责文化(p269)显性文化(p270)报酬(p241)等,都值得去了解和追寻。

  • “Patrick Debois说过,devops是一个 人类问题 ,这说明每个组织都有该组织中的人特有的一种devops文化。”(p67)

  • “要实现成功的devops变革,有效的工具使用当然是必要的,但这些还不够…..实际上,解决组织中出现的人际冲突和团队之间的冲突对于培养持久的关系并最终形成一个 devops环境 至关重要。”(p67)

  • “基于有效实现devops的4大支柱,可以解决影响软件开发的 文化技术问题。”(p69)

  • “工具的价值和成本是不一样的。… 即使是几乎所有人都认为很重要的工具(如配置管理或源码控制工具)也有不同,有些可能对某个特定的环境更为使用。
    根据经验、知识和流程的不同,工具也有变化。 工具必须适应环境的上下文。如果没有上下文,最好的工具就无从谈起,而上下文是不断变化的。” (p189)

  • “工具不能与有效实现devops的另外3各支柱完全分离。最终工具还是要由人来使用…工具不仅影响我们如何工作和交互,也会受其影响…”(p220)

二、基本套路

4个章节基本套路如下

  1. 解释 XX,定义 XX,附带研究一个案例

  2. 说明误区 告诉我们什么样的情形我们理解错误

  3. 说明错误排查 告诉我们如何处理困境,并根据情况解决问题

三、脑图

见下方
devops 4 pillars

原始地址:https://mubu.com/docfgrtOS4mn0

'devops' 还是 'DevOps'?

1. 什么是 devops,还是 DevOps

最近在阅读 《Effective DevOps》(中文版) 时看到一些有趣的内容,如标题所问到的 – devops 还是 DevOps? (P6)。
接触这个概念已经2年左右,自身的职位名称也是这个单词,但从来也没有思考过这个问题,而该书的作者在前言中提出来了,不得不说思维之严谨。不妨读者自身也想一想,到底那个更合适,为什么?

摘自《Effective DevOps》(中文版)P6

对于 “devops”这个词的字母是否大写我们还有很多讨论。一个简单的在线调查显示,大多数人都支持“DevOps”。我们还发现组织比较关注“Dev”和“Ops”,以至于出现了 “DevSecOps”和“DevQAOps”,因为“DevOps”隐含地只包括 “Dev” 和 “Ops”。
所以最后我们选择了“devops”,这对应原来的推特上的标签,用来联系希望改善协作的人,他们希望谈话时不再区分“你们”和“我们”,而应该更多地讨论如何利用可持续的工作实践来支持企业发展。
成功的项目需要有适当的输入、努力、见解以及整个组织中人们之间的协作,你的组织中存在的问题可能不只限于开发人员和运维团队。我们在这本书中有意选择使用小写的 “devops” 来反映我们的观点,这只是有一种包容,并没有其他的意思。

2.常见的devops误区 (P56)/devops不是什么

devops只与开发人员和系统管理员有关
devops是一个团队
devops是一个职位
devops表示由一半的人完成全部工作
devops只是关于工具
devops只是关于自动化
实现devops有一种“正确方法”(或“错误方法”)

3.总结

devops 更多的是一种文化,哲学上的概念,说白了就是无法言传,只可意会

RCA(根本原因分析)

根本原因分析(Root cause analysis,RCA)方法是明确事件或几近错失的决定性“根本”原因,并采取适当的措施避免问题再次发生。这是一个迭代的过程,会一直持续,直到找出所有组织要素,或者知道已经处理完所有数据。

《Effective DevOps》(中文版) P65

方法一:5 Why

5why分析法是指对同一个问题,进行连续的提问,可能是3次,可能是5次,也可能是10次,直到能发现最根本的原因为止。

5 why详细应用步骤

一、把握现状

  • 1.识别问题。 问:我知道什么?
  • 2.澄清问题。 问:实际发生了什么?
  • 3.分解问题。 问:关于这个问题,我还应该知道什么?
  • 4.查找原因要点。 问:我们需要知道什么以解决问题?
  • 5.掌握问题倾向。 问:什么时间?多大频次?

二、原因调查

  • 6.识别和确认异常事件的直接原因。 问:这个问题为什么会发生?
  • 7.使用5why调查法来建立一个通向根本原因的关系链 问:为什么xxx会发生?

三、问题纠正(验证有效性)

  • 8.采取明确措施,验证方案是否有效。 问: 方案是否有效,情况如何?

5why应用要点

  • 推论要客观、理性;
  • 避免围绕问题本身,避免责任推卸;
  • 注意层次之间的关系,不要跳步;
  • 分析要充分,以便找出根本原因;
  • 要对分析后的方案确认,并通过现场分析观察,然后改善;

5why案例

方法二:鱼骨图

什么是鱼骨图

鱼骨图又名“因果分析法”,是由日本管理大师石川馨先生所发展出来的,因此又被称为“石川图”。鱼骨图是一种透过现象看本质,从而发现问题“根本原因”的分析方法。这种因果图可以帮助团队以可视化的方式分析原因,并将原因归类,找出差异来源,发现不同来源之间的关系,从而对过程行为有深层次的了解。分为问题型、原因型及对策性型鱼骨分析等三种,具有简捷、实用、直观等特点。最初,鱼骨图被用于质量管理领域。

如何制作鱼骨图

制作鱼骨图分为两个步骤: 分析问题原因/结构,绘制鱼骨图

Step1: 分析问题原因/结构

No Context
步骤 a. 针对问题点选择层别方法(如人机料法环等)
b.通过头脑风暴,分别对各类别找出所有可能因素
c.将找出的各要素进行归类、整理,明确其从属关系
d. 分析选取重要因素
e. 检查各要素的描述方法,确保语法简明、意思明确
要点 a. 确定大要因(大骨)
b. 大因素必须用中性词描述(不说明好坏),中、小因素必须使用价值判断(如…不良)
c.头脑风暴时,尽可能多的找出所有可能原因,尽量客观描述
d. 中因素跟特性值,小因素跟中因素有直接的原因-问题关系,小因素应该分析至可以直接下对策
e. 如果某种原因可同时归属于两种或两种以上因素,庆关联性最强者最准
f. 选取重要因素时,不要超过7项,且应该标识在最末端

Step2: 绘制鱼骨图

  • 1.由问题的负责人召集与问题有关的人员组成一个工作组(work group),该组成员必须对问题有一定深度的了解。
  • 2.问题的负责人将拟找出原因的问题写在黑板或白纸右边的一个三角形的框内,并在其尾部引出一条水平直线,该线称为鱼脊。
  • 3.工作组成员在鱼脊上画出与鱼脊成45°角的直线,并在其上标出引起问题的主要原因,这些成45°角的直线称为大骨。
  • 4.对引起问题的原因进一步细化,画出中骨、小骨……,尽可能列出所有原因
  • 5.对鱼骨图进行优化整理。
  • 6.根据鱼骨图进行讨论。

如何使用??

鱼骨案例

ref: https://zh.wikipedia.org/wiki/%E7%9F%B3%E5%B7%9D%E5%9B%BE

tmux tutorial

1.tmux是什么

tmux (terminal multiplexer),是一个 BSD 协议发布的终端复用软件,用来在服务器端托管同时运行的 Shell.

效果如图:
tmux_01

tmux

几个重要概念:

  • 1.会话(session): 建立一个 tmux 工作区会话,会话可以长期驻留,重新连接服务器不会丢失,我们只需重新 tmux attach 到之前的工作区就可以恢复会话
  • 2.窗口(window): 容纳多个窗格
  • 3.窗格(pane): 可以在窗口中分成多个窗格

主要解决以下问题:

  • 想同时打开多个目录不得不开很多终端标签来回切换
  • 开了一个 vim 窗口之后,想切到其他目录不得不重新打开个一个终端窗口 ssh 到服务器
  • 运行一个脚本,服务器断掉失联之后当前进程被服务器给无情地杀掉,不得不用 nohup 等方式让脚本在后台跑

2.安装

1
2
3
4
brew install tmux       # OSX
pacman -S tmux # archlinux
apt-get install tmux # Ubuntu
yum install tmux # Centos
1
2
3
#check tmux version
➜ ~ tmux -V
tmux 2.9a

3.使用

tmux的所有指令,都包含同一个前缀,默认为 Ctrl+b ,输入完前缀过后,控制台激活,命令按键才能生效。

  • 会话(session)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #新建会话
    tmux new -s <Session_Name> # tmux new-session -s <Session_Name>

    #列出所有会话
    tmux ls # tmux list-session

    #进入会话
    tmux a -t <Session_Name> # tmux attach -t , -t mean 'to'

    ###当且只有一个session时,可以直接输入命令 tmux a 或 tmux attach 进入

    #关闭会话
    tmux kill-session -t <Session_Name> # kill命令有kill-pane、kill-server、kill-session 和 kill-window共四种

快捷指令
(先按下 Tmux 前缀 ctrl+b,然后松开,继续按下面的字母)

1
2
3
4
:new<回车>  启动新会话
s 列出所有会话
$ 重命名当前会话
d 暂时离开 deattach
  • 窗口(window)

    快捷指令

1
2
3
4
5
6
7
8
c  创建新窗口
w 列出所有窗口
n 后一个窗口 next
p 前一个窗口 pervious
f 查找窗口
, 重命名当前窗口
& 关闭当前窗口
数字0,1,2... 也可用来切换窗口
  • 窗格(pane)

    快捷指令

1
2
3
4
5
6
7
8
9
%  垂直分割
" 水平分割
上下左右 方向按键调整光标位置
o 选择下一面板
x 关闭窗格
q 显示每个窗格是第几个,当数字出现的时候按数字几就选中第几个窗格
{ 与上一个窗格交换位置
} 与下一个窗格交换位置
z 切换窗格最大化/最小化

其他:

1
2
3
t  窗口中央显示一个数字时钟
? 列出所有快捷键
: 命令提示符

场景:将打的命令同步发送到所有的pane

    1. 先按下 Tmux 前缀
    1. :setw synchronize-panes

同样的命令(synchronize-panes)再输入一次就解除这种模式。

基本配置:

  • 配置文件 ~/.tmux.conf ,如修改 默认的前缀快捷键

    1
    2
    3
    4
    5
    6
    $ touch .tmux.conf
    $ cat .tmux.conf
    # Change the prefix key to C-a
    set -g prefix C-a
    unbind C-b
    bind C-a send-prefix
  • 生效配置 tmux source-file ~/.tmux.conf 或用动态载入配置的方法

More ref:

  • Copyrights © 2019-2024 John Doe
  • Visitors: | Views:

请我喝杯咖啡吧~