Linux 测试开发第八期_shell 必备技能实战_20190120

思寒_seveniruby for 霍格沃兹测试学院外部交流圈 · January 20, 2019 · Last by swjClaire replied at April 14, 2019 · 17203 hits

基础数据

  • 用自己的帐号登录 ssh 手机号码后8位@shell.testing-studio.com
  • 没有账号的可以临时用 ssh hogwarts2019@shell.testing-studio.com
  • /tmp/nginx.log 保存了一份一天的nginx访问log

awk

sed

#sed 's#正则#结果#g'
echo 123abc456 | sed 's#abc#_#'
echo 123abc456 | sed 's#[2-9]#x#g'

awk '/00:00:01/,/00:00:04/' /tmp/nginx.log
sed -n '/00:00:01/,/00:00:04/p' /tmp/nginx.log

语法题

  • 1. 找出log中的404 500的报错
  • 2. 找出500错误数据行的前10条非500的数据
  • 3. 找出访问量最高的ip
  • 4. 找出访问量最高的页面地址
awk '{print $7}' /tmp/nginx.log |sed -e "s#[0-9]\{1,\}#*#g" -e 's#?.*##' -e 's#/[^/]*\.png.*##'|  sort | uniq -c | sort -nr |head -10

Linux测试

  • 5. 文件检索 在特定目录下找到包含特定debug的数据或者代码
  • 6. 网络统计 统计当前机器的连接数 查看当前开放的端口和进程
  • 7. 性能统计 统计某个进程的cpu和mem的增长情况 打印三列数据 时间 cpu mem
  • 8. 任务处理 使用简易的工具对第三方服务做加压并统计性能
for i in $(seq 1 20);do time=$(date +%H:%M:%S);  info=$(ps -o %cpu -o %mem 9081 | tail -1 );echo $time $info ;sleep 1;done
16:46:50 0.9 0.2
16:46:58 0.9 0.3
16:47:00 0.9 0.2

while true; do count=$(jobs -l | grep Running|wc -l); [ $count -le 5 ] && { time curl https://testerhome.com/topics/17870 &>/dev/null & } || echo $count waiting ;done

App测试

  • 9. apk文件分析 分析app的文件内容检索特定的api调用
  • 10. 分析api的调用序列 app性能分析
  • 11. 统计某个app的一段时间内的性能
  • 12. 自动化测试 编写一个自动遍历工具
adb shell "uiautomator dump && cat /sdcard/window_dump.xml"
adb shell input tap x y
adb shell input text 123
adb shell "uiautomator dump && cat /sdcard/window_dump.xml" |grep -oE "<node[^>]*>" | grep -v 'resource-id=""' | grep -oE 'bounds=".*?]"' | sed 's#[^0-9]\{1,\}# #g'

获取界面结构xml -> node -> 坐标 -> input

持续集成

可视化

echo '1
3
2
4
6' | gnuplot -e "set terminal dumb;plot '<cat' using 1 with line"

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 58 条回复 时间 点赞

1.

#1.
cat /tmp/nginx.log |grep -E "404|500"|head -5
#2.
cat /tmp/nginx.log |grep -E "500" -C1

2Floor has been deleted
3Floor has been deleted
第一题

less /tmp/nginx.log |grep -E " 404 | 500 "|head -5

cat /tmp/nginx.log |grep -E "404|500"|head -5 
7Floor has been deleted

less /tmp/nginx.log |grep -Eo "404 |500"

less \tmp\nignx.log | grep -E "404|500"

作业1 cat /tmp/nginx.log | grep '404'| head -3

$ cat nginx.log |awk '{print $9}'|grep '400\|500'|head -3
500
400
500


cat /tmp/nginx.log | grep -o "404|500"

以上答案全错

  • grep -E " 404 | 500 " /tmp/nginx.log
  • awk '$9=="404"' /tmp/nginx.log

awk '$9=="404"' /tmp/nginx.log | grep -B 10

作业2

grep -B 10 "500" /tmp/nginx.log | less

grep -10h " 500 " /tmp/nginx.log

17Floor has been deleted

grep -C 10 -E " 500 " nginx.log | less

grep -B 10 " 500 " /tmp/nginx.log|less

grep -b10 C " 500 " /tmp/nginx.log

grep -E "500 " head -n 10 /tmp/nginx.log

grep ' 500 ' -B 10 nginx.log |less

grep -B 10 "500 " /tmp/nginx.log

作业3:

awk '{print $1}' /tmp/nginx.log | sort | uniq -c | sort -r | head -1

awk '{print $1}' nginx.log | sort | uniq -c | sort -rn | head -5

awk '{print $1}' nginx.log | sort | uniq -c | head -5

  • grep -B 5 /tmp/nginx.log|awk '{print $1}' | sort | uniq -c

awk '{print $1}' /tmp/nginx.log |sort |uniq -c |sort -n |tail -5

作业3
head -10000 /tmp/nginx.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -5

作业4

awk '{print $7}' /tmp/nginx.log |sed "s#[1-9]#*#g"|sort |uniq -c |sort -nr|head -5

作业4:
awk '{print $7}' nginx.log |sed 's/[0-9]//g' | sed 's/?.*//g' | sort | uniq -c | sort -rn | head -5

2396 /cable
1812 /topics/
1218 /topics//replies//edit
818 /topics//replies//reply_suggest
442 /

作业4:awk '{print $7}' /tmp/nginx.log | sed 's#[0-9]#xxx#g'|sort |uniq -c|sort -nr |head -1

awk '{print $7}' /tmp/nginx.log | sed 's#[0-9]#x#g' | sort | uniq -c | sort -nr | head -5

awk '{print $7}' nginx.log|sed 's#/[0-9]*/#/x/#g'|sort|uniq -c|sort -nr|head -1

作业 4、awk '{print $7}' nginx.log | sed 's#[0-9]#*#g' |sort |uniq -c |sort -nr|head -5

作业4:

awk '{print $7}' /tmp/nginx.log |sed 's#/[0-9].*#_#g'|sort|uniq -c|sort -nr |less

作业4:
awk '{print $7}' nginx.log | sed 's#/[0-9]*/#/ID/#g' | sort | uniq -c | sort -nr | head -5

作业4:
awk '{print $7}' /tmp/nginx.log | sed 's#[0-9]#_#g' | sort | uniq -c | sort -nr | head -5

awk '{print $7}' /tmp/nginx.log | sed 's#[0-9]#x#g'| sort | uniq -c | sort -nr |head -5

  • 作业4 awk '{print $7}' /tmp/nginx.log|sort|uniq -c | sort -nr|sed 's#[0-9]#*#g'|head -5
41Floor has been deleted
netstat|grep ":ssh"|awk '{print $5}'|uniq -c|wc -l

netstat -ntp | grep 22 | sort | uniq -c | wc -l

作业5:
netstat -ltnp | sed 1,2d | grep 22 | sort | uniq -c

45Floor has been deleted
while true;do cpu=`ps -o %cpu 10125 |tail -1`;mem=`ps -o %mem 10125|tail -1`;time=`date +%H%M%s`;echo $time,$cpu,$mem;sleep 1;done
  1. while true;do date +%H%M%S; ps -o %CPU -o %mem;sleep 0.2;done
48Floor has been deleted
echo date cpu mem;for ((i=0;i<20;i++));do date=$(date +%H%M%S);cpu=$(ps -o %cpu $$|awk 'NR==2');mem=$(ps -o %mem $$|awk 'NR==2');echo $date $cpu $mem;done;sleep 1

工作中遇到 tail -f xxx.log >> test.txt,追加保存到txt文件,但想要这个文件只存最新的50条log数据,不知道怎么做比较好

MaisieHu8891 回复

tail -n 50 >> test.txt

这些我感觉我永远也记不住,只能需要时Google了。

黄老师越来越赞了。缺少的就是这些基本功。

第一题的附加(同时打印出404和500的前三条,是在想不出来,也没查到,才用了这个弱鸡办法)

awk '$9=="500"' nginx.log |head -3;echo -e "\n================================================\n";awk '$9=="404"' nginx.log |head -3
jor 回复

这样的话 是给日志最后50条追加进来吧,我想保持test.txt文件只有50条数据

Author only

电脑连接Android真机,adb shell 后,输入ps -ef ,结果是,如何解决?

while true;do count=$(jobs -l |grep Running| wc -l);[ $count -le 5 ] && { time curl https://www.baidu.com &>/dev/null & };echo $count waiting;sleep 0.5;done

问题:
思寒老师,小括号是定义变量 ,中括号里面是判断语句,后面 { time curl https://www.baidu.com &>/dev/null & } 这里为啥是花括号?
然后花括号前面为什么是&& 与呢?

我的理解:
先定义一个count变量统计当前进程总数,如果count小于5 ,那么把访问的地址放到后台执行;大于5时输出waiting .写了下面的语句,貌似也是可以的。盼回复,不知道我的理解对不对。

while true;do count=$(jobs -l |grep Running| wc -l);if [ $count -le 5 ];then { time curl https://www.baidu.com &>/dev/null & };else echo $count waiting;sleep 0.5;fi;done
Author only

作业3:
awk '{print $1}' nginx.log | sort | uniq -c | sort -nr | head -5

cat nginx.log | head -n 5
cat nginx.log | awk '$9~/404|500/{print $0}'

作业2

  1. 找出500错误数据行的前10条非500的数据 cat nginx.log | grep ' 500 ' -B 10

作业三
找出访问量最高的ip
cat nginx.log | awk '{print $1}' | sort |uniq -c | sort -nr -k 1 | head -1

作业四
找出访问量最高的页面地址
cat nginx.log | awk -F ' |?' '{print $7}' | sed -E 's#/[0-9]+#/xxx#g' | sort | uniq -c | sort -nr -k 1 | head -1

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up