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

思寒_seveniruby · 2019年01月20日 · 最后由 swjClaire 回复于 2019年04月14日 · 6976 次阅读

基础数据

  • 用自己的帐号登录 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

2楼 已删除
3楼 已删除
第一题

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

cat /tmp/nginx.log |grep -E "404|500"|head -5 
7楼 已删除

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

17楼 已删除

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

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

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

21楼 已删除

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
41楼 已删除
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

45楼 已删除
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
21楼 已删除
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 了。

🌀鸣人❤️一樂🍜 [该话题已被删除] 中提及了此贴 01月22日 10:33

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

第一题的附加(同时打印出 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 条数据

仅楼主可见

电脑连接 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
仅楼主可见

作业 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

67楼 已删除
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册