测试开发班录播课程命令及URL汇总

注:本贴为录播课件内容补充贴,缺少的内容可以在回复区里进行反馈

1、Linux系统与shell环境准备

ls: 列出目录
cd:切换目录
pwd:显示目前的目录
mkdir:创建一个新的目录
rmdir:删除一个空的目录
cp: 复制文件或目录
rm: 移除文件或目录
mv: 移动文件与目录,或修改文件与目录的名称

Shell基础

常见的shell

Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh

运行shell

  • chmod +x ./test.sh #使脚本具有执行权限
    ./test.sh #执行脚本

  • /bin/sh test.sh

Linux常用命令

文件

ls: 列出目录
cd:切换目录
pwd:显示目前的目录
mkdir:创建一个新的目录
rmdir:删除一个空的目录
cp: 复制文件或目录
rm: 移除文件或目录
mv: 移动文件与目录,或修改文件与目录的名称

文件权限

r 读权限read 4
w 写权限write 2
x 操作权限execute 1
chmod 777 test,修改test文件属性

网络

netstat:打印Linux网络系统的状态信息
-t 列出所有tcp
-u 列出所有udp
-l 只显示监听端口
-n 以数字形式显示地址和端口号
-p 显示进程的pid和名字

性能

top:持续监视系统性能
ps:查看进程信息
-aux 显示所有进程,包括用户,分组情况

Linux 常用命令之 性能统计

CPU

  • 查看 CPU 信息:cat /proc/cpuinfo
  • 负载信息:top

测试系统负载

{ yes > /dev/null & } && sleep 30 && ps -ef|grep yes|awk '{print $2}'|xargs kill

for i in $(seq 0 $(($(cat /proc/cpuinfo |grep processor|wc -l)-1))); do taskset -c $i yes > /dev/null & done && sleep 60 && ps -ef|grep yes|awk '{print $2}'|xargs kill

top

  • -d 间隔时间,top -4 每隔4秒更新一次

  • -n 获取多次cpu的执行情况 ,top –n 4 只更新4次

  • -p 获取指定端口的进程的数据

  • -b 批处理模式

  • Tasks:进程总数

  • running:正在运行的进程数

  • sleeping:睡眠的进程数

  • stopped:停止的进程数

  • zombie:僵尸进程数

  • Cpu:

    • us(user time):用户空间占用 CPU 百分比
    • sy(system time):内核空间占用 CPU 百分比
    • ni(nice):改变过优先级的进程占用CPU的百分比
    • id(idle):空闲CPU百分比
    • wa:IO等待占用CPU的百分比
    • hi:硬中断(Hardware IRQ)占用CPU的百分比
    • si:软中断(Software Interrupts)占用CPU的百分比
  • 进程

    • PR:进程优先级
    • NI:nice值。负值表示高优先级,正值表示低优先级
    • VIRT:进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
    • RES:进程使用的、未被换出的物理内存大小,单位kb
    • SHR:共享内存大小,单位kb
    • S:进程状态:D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程
    • %CPU:上次更新到现在的CPU时间占用百分比
    • %MEM:进程使用的物理内存百分比
    • TIME+:进程使用的CPU时间总计,单位1/100秒
    • COMMAND:命令名/命令行

内存

free -m
total used free shared buff/cache available
Mem: 7934 2135 3125 64 2673 5437
Swap: 2047 0 2047
total 总物理内存
used 已经使用的物理内存
free 没有使用过的物理内存
shared 多进程共享内存
buff/cache 读写缓存内存,这部分内存是当空闲来用的,当free内存不足时,linux内核会将此内存释放
buffer是即将要被写入磁盘的,而cache是被从磁盘中读出来的。
available 还能被“应用程序"使用的物理内存

IO

安装

  • Ubuntu:
    • apt install -y sysstat
    • apt install iftop
    • apt install strace
  • CentOS
    • yum install -y sysstat
    • yum install -y epel-release
    • yum install -y iftop
    • yum install strace

硬盘IO

  • 写:dd if=/dev/zero bs=1024 count=4096000 of=test.iso
  • 读:dd if=test.iso bs=64k |dd of=/dev/null
  • bs:设置读/写缓冲区的字节数
  • /dev/null,空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据 。
  • /dev/zero 是一个特殊的文件,当你读它的时候,它会提供无限的空字符。

iostat 1

avg-cpu: %user %nice %system %iowait %steal %idle
0.11 0.03 0.23 0.00 0.00 99.63
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
loop0 0.00 0.01 0.00 497 0

-c 只看cpu
-d 只看硬盘

  • 块设备(磁盘)的状况
  • tps:每秒进程下发的IO读、写请求数量
  • kB_read/s:每秒从驱动器读入的数据量
  • kB_wrtn/s:每秒从驱动器写入的数据量
  • kB_read:读入数据总量
  • kB_wrtn:写入数据总量

网络 IO

  • iftop
    • 不进行DNS反解析:iftop -n -i eth0
    • => 代表发送数据
    • <= 代表接收数据
    • TX (Transmission):发送
    • RX (Reception):接收
    • TOTAL 全部的流量
    • cum(cumulative):目前累积流量
    • peak:峰值流量
    • rates:平均值,2秒,10秒和40秒的平均流量
    • t 切换显示状态,接受、发送数据,p显示端口
  • 下载文件:http://mirrors.aliyun.com/centos/8.2.2004/isos/x86_64/CentOS-8.2.2004-x86_64-dvd1.iso

Linux 常用命令之 统计命令

sort

  • sort 常用参数
    • -b:忽略开头的空白字符
    • -f:将小写字母看作为写字母
    • -h:根据存储容量排序(KB、MB、GB)
    • -n:按数字排序
    • -o:把结果写入文件
    • -r:以相反的顺序来排序
    • -t:指定分隔符。默认为空格
    • -V:按照数字版本排序
    • -k:指定排序的关键字,与 -t 参数配合使用
    • 参考:https://wangchujiang.com/linux-command/c/sort.html

uniq

  • uniq 常用参数(只检查上下行是否重复)
    • -c:统计重复出现的次数
    • -d:所有邻近的重复行只被打印一次。重复次数要>=2次
    • -D:所有邻近的重复行将全部打印
    • -f:跳过对前n个列的比较
    • -s:跳过对前n个字符的比较
    • -w:只对每行前n个字符进行比较

wc

  • wc 常用参数
    • -c:统计字节数:chars
    • -l:统计行数
    • -w:统计单词数
    • -L:打印最长行的长度

3、Linux三剑客与管道使用

管道

Linux提供管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入

正则

正则表达式就是记录文本规则的代码

演练环境

举例

找出所有的hi单词 \bhi\b
hi单词后面有lucy单词 \bhi\b.*\blucy\b
以0开头,然后是两个数字,然后是一个连字号“-”,最后是8个数字 0\d{2}-\d{8}

grep

根据用户指定的模式(pattern)对目标文本进行过滤,显示被模式匹配到的行

选项

-v 显示不被pattern匹配到的行
-i 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-E 使用ERE,相当于egrep

sed

sed是流编辑器,一次处理一行内容

sed [-hn…][-e][-f<script文件>][文本文件]
-h 显示帮助。
-n 仅显示script处理后的结果。

sed [-hnV][-e][-f<script文件>][文本文件]
-e 以选项中指定的script来处理输入的文本文件。
-f<script文件> 以选项中指定的script文件来处理输入的文本文件。

a :新增 sed -e ‘4 a newline’
c :取代 sed -e ‘2,5c No 2-5 number’
d :删除 sed -e '2,5d’
i :插入 sed -e ‘2i newline’
p :打印 sed -n ‘/root/p’
s :取代 sed -e 's/old/new/g’

awk

把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行后续处理

awk ‘pattern + action’ [filenames]
-pattern 正则表达式
-action 对匹配到的内容执行的命令(默认为输出每行内容)

FILENAME awk浏览的文件名
BEGIN 处理文本之前要执行的操作
END 处理文本之后要执行的操作
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域的个数(列数)
NR 已读的记录数(行数

OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
$0 整条记录
$1 表示当前行的第一个域…以此类推

Bash编程语法

变量

命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
中间不能有空格,可以使用下划线(_)
不能使用标点符号
不能使用bash里的关键字(可用help命令查看保留关键字)

变量类型

字符串:your_name=“hogwarts”
拼接字符串:greeting=“hello, “$your_name” !”
数组 array_name=(value0 value1 value2 value3)
取数组 valuen=${array_name[n]}
单独赋值 array_name[0]=value0

控制语句

if

比较两个变量的大小并输出不同的值
i f [ $a -eq $b ]; then echo “equal”; elif [ $a -lt $b ];then echo “small”; elif [ $a -gt $b ];then echo “big”;fi

for

循环读取文件内容并输出
for i in $(cat dir.txt);do echo $i;done

while

循环读取文件内容并输出
while read line;do echo $line;done<dir.txt

Bash脚本编写

read

read命令是用于从终端或者文件中读取输入的内部命令
读取整行输入
每行末尾的换行符不被读入

使用

从标准输入读取输入并赋值给变量
read var
从标准输入读取多个内容
read var1 var2 var3
不指定变量(默认赋值给REPLY)
read

脚本传参

$0 脚本名称
$1~$n 获取参数
$# 传递到脚本的参数个数
$$ 脚本运行的当前进程ID号
$* 以一个单字符串显示所有向脚本传递的参数
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误

算数运算

a=10  b=20
+	加法	`expr $a + $b` 结果为 30
-		减法	`expr $a - $b` 结果为 -10
*	乘法	`expr $a \* $b` 结果为  200
/	     除法	`expr $b / $a` 结果为 2
a=10  b=20
%	取余	`expr $a % $b` 结果为 10
=	赋值	a=$b 将把变量 b 的值赋给 a
==	相等  相同则返回 true:[ $a == $b ] 返回 false
!=	不相等 不相同则返回 true:[ $a != $b ] 返回 true

-eq	检测相等 [ $a -eq $b ] 返回 false
-ne	检测不相等 [ $a -ne $b ] 返回 true
-gt		检测左边是否大于右边	[ $a -gt $b ] 返回 false
-lt		检测左边是否小于右边  [ $a -lt $b ] 返回 true
-ge	检测左边是否大于等于右边 [ $a -ge $b ] 返回 false
-le		检测左边是否小于等于右边  [ $a -le $b ] 返回 true

Python环境

官方地址下载python安装包 : https://www.python.org/
Python安装文档(windows系统):Python和PyCharm环境安装配置 - #4,来自 hogwarts-yunlong

官方地址下载pycharm安装包

安装包
pip install 包名==版本号
pip install selenium==2.39.0
pip install -i 镜像地址 --trusted-host 镜像地址对应的host
举例:pip3 install jupyter -i Simple Index --trusted-host pypi.douban.com
国内的pip源
阿里云:Simple Index
清华:Simple Index
豆瓣:Simple Index

2,基础的数据类型

Python官方参考文档

allure:https://demo.qameta.io/allure/#

windows/mac通用安装方法
https://github.com/allure-framework/allure2/releases 下载allure2.7.zip包,
解压->进入bin目录->运行allure.bat,
把bin目录加入PATH环境变量
Mac 可以使用brew安装:
brew install allure
官网:http://allure.qatools.ru/
文档:Allure Framework

生成报告

安装allure-pytest插件
pip install allure-pytest
运行:
在测试执行期间收集结果
pytest [测试文件] -s –q --alluredir=./result/ (—alluredir这个选项 用于指定存储测试结果的路径)
查看测试报告
方式一:测试完成后查看实际报告, 在线看报告,会直接打开默认浏览器展示当前报告
allure serve ./result/ (注意这里的serve书写)
方式二:从结果生成报告,这是一个启动tomcat的服务,需要两个步骤:生成报告,打开报告
生成报告
allure generate ./result/ -o ./report/ --clean (注意:覆盖路径加–clean )
打开报告
allure open -h 127.0.0.1 -p 8883 ./report/

allure运行不同的测试用例

按features运⾏行行测试你⽤用例例
pytest --alluredir= log/report/xml --allure_features=测试登录功能,测试我的自选 testcases/alluredemo
按story运⾏测试⽤例
pytest --alluredir= log/report/xml --allure_stories=测试已登录的场景 testcases/alluredemo
按severity运⾏测试⽤例
pytest --alluredir= log/testreport/xml --allure_severities=blocker testcases/alluredemo

前端自动化测试-截图

场景:
前端自动化测试经常需要附加图片或html,在适当的地方,适当的时机截图
解决:
@allure.attach显示许多不同类型的提供的附件,可以补充测试,步骤或测试结果。
步骤:
在测试报告里附加网页:
allure.attach(body(内容), name, attachment_type, extension):
allure.attach(‘ 首页’, ‘这是错误页的结果信息’, allure.attachment_type.HTML)
在测试报告里附加图片:
allure.attach.file(source, name, attachment_type, extension):
allure.attach.file(“./result/b.png”, attachment_type=allure.attachment_type.PNG)

pytest-html生成报告

  • 安装:
    • pip install pytest-html
  • 生成html报告
    • pytest -v -s --html=report.html - - self-contained-html

selenium

简介
Selenium支持web浏览器的自动化。它主要由三个工具构成:WebDriver、IDE、Grid
官方网站

selenium IDE

官网:

Chrome插件:
https://chrome.google.com/webstore/detail/selenium-ide/mooikfkahbdckldjjndioackbalphokd
Firefox插件:

github release:
https://github.com/SeleniumHQ/selenium-ide/releases
其它版本:
https://addons.mozilla.org/en-GB/firefox/addon/selenium-ide/versions/
注意:Chrome插件在国内无法下载,Firefox可以直接下载。

  • 安装完成后,通过在浏览器的菜单栏中点击它的图标来启动它:
  • 如果没看到图标,首先确保是否安装了Selenium IDE扩展插件,其次,可以在下面的地址访问所有插件:
  • Chrome: chrome://extensions
  • Firefox: about:addons

扩展

代码导出:

常见问题:

Python selenium

小白入门:https://selenium-python.readthedocs.io/

Actions

官方文档
https://selenium-python.readthedocs.io/api.html
ActionChains:执行PC端的鼠标点击,双击,右键,拖拽等事件
TouchActions:模拟PC和移动端的点击,滑动,拖拽,多点触控等多种手势操作

TouchAction

https://www.selenium.dev/selenium/docs/api/py/webdriver/selenium.webdriver.common.touch_actions.html

frame演示

多frame切换案例:
打开包含frame的web页面 菜鸟教程在线编辑器
打印’请拖拽我’元素的文本
打印’点击运行’元素的文本

def test_framedeal_1(self):
    self.driver.get(“https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable")
    self.driver.switch_to.frame("iframeResult")
    print(self.driver.find_element_by_id("droppable").text)

    self.driver.switch_to.parent_frame()
    print(self.driver.find_element_by_id("submitBTN").text)

多浏览器支持

browser = os.getenv("browser").lower()
if browser == 'firefox':
    self.driver = webdriver.firefox()
elif browser == 'headless':
    self.driver = webdriver.PhantomJS()
else:
    self.driver = webdriver.Chrome()

启动Chrome debug

  • 正常启动chrome的debug模式
    • 默认macOS系统

      • /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
    • Windows下找到chrome.exe位置执行下面的命令

      • chrome.exe --remote-debugging-port=9222

alert窗口

测试案例:
打开网页 菜鸟教程在线编辑器
操作窗口右侧页面, 将元素1拖拽到元素2
这时候会有一个alert弹框,点击弹框中的’确定’
然后再按’点击运行’
关闭网页

def test_framedeal(self):
    self.driver.switch_to.frame("iframeResult")
    action = ActionChains(self.driver)
    action.click_and_hold(self.driver.find_element_by_id("draggable"))\
        .move_to_element(self.driver.find_element_by_id("droppable")).release().perform()
    self.driver.switch_to.alert.accept()
    # self.driver.switch_to.default_content()
    self.driver.switch_to.parent_frame()
    print(self.driver.find_element_by_id("submitBTN").text)
    self.driver.find_element_by_id("submitBTN").click()
    time.sleep(3)

pageobject

2013 Martin Flower PageObject
2015 Selenium https://github.com/SeleniumHQ/ selenium/wiki/PageObjects
2020 /documentation/test_practices/encouraged/page_object_models/

原则

appium

环境

安装JDK (1.8版本)
官网下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

安装appium desktop (appium server + appium inspector工具)
下载对应操作系统的安装包:https://github.com/appium/appium-desktop/releases
如果不需要appium inspector ,也可以通过 npm直接安装appium
官方安装(不推荐)
npm install -g appium
淘宝提供(推荐)
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install -g appium
运行
appium (不报错说明安装成功)

安装appium python client
方式一:Pip install appium-python-client(推荐)
方式二:下载源码包:
下载地址:https://github.com/appium/python-client
https://pypi.python.org/pypi/Appium-Python-Client
解压后在命令行中进入python-client-master目录,该目录下包含setup.py文件
执行命令python setup.py install命令安装客户端

获取app的信息

app信息
获取当前界面元素:adb shell dumpsys activity top (推荐)(重点)
获取任务列表:adb shell dumpsys activity activities
app入口
adb logcat |grep -i displayed (推荐)(重点)
aapt dump badging mobike.apk | grep launchable-activity
apkanalyzer 最新版本的sdk中才有
启动应用
adb shell am start -W -n com.xueqiu.android/.view.WelcomeActivityAlias -S (重点)

capability

app控件交互

高级定位技巧

uiautomator

get_attribute

assert断言

hamrest

appium纯web页面

手机端
被测浏览器:(不可以是第三方浏览器) ’Safari’ for iOS and ‘Chrome’, ‘Chromium’, or ‘Browser’ for Android,
PC端
安装Chrome浏览器(或chromium),并且能登录https://www.google.com/
下载对应手机浏览器对应的driver版本
国内镜像地址:CNPM Binaries Mirror
appium github:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/web/chromedriver.md
客户端代码:
desirecapability
“browser” = “Browser” 或者“browser” = ”Chrome”
“chromedriverExecutable” = “指定driver地址”
Mac Chromedriver 默认地址:
/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-chromedriver/chromedriver/mac/

获取webdriver版本

查看手机浏览器的版本
adb shell pm list package |grep webview
adb shell pm dump com.android.browser|grep version
adb shell pm dump com.android.chrome|grep version
adb shell pm dump com.android.webview|grep version

  • chrome://inspect/

appium混合应用

PC:
浏览器能访问 https://www.google.com/
chromedriver下载对应的版本
https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/web/chromedriver.md
手机端
应用代码需要打开webview开关
代码
appPackage, appActivity
desirecapability里面添加:chromedriverExecutable:driver路径

webdriver开关

monkey

adb shell monkey 100 对所有包随机操作
adb shell monkey -p com.xueqiu.android 100 对指定包
adb shell monkey -p com.xueqiu.android -s 20 80 时间种子
adb shell monkey -p com.xueqiu.android -vv -s 20 80 详细日志

时间延迟
adb shell monkey -p com.xueqiu.android --throttle 5000 100
事件百分比
adb shell monkey -p com.xueqiu.android --pct-touch 10 1000

–pct-touch:触摸事件,比如点击
–pct-motion:动作事件,比如滑动(直线)
–pct-trackball:轨迹事件,比如移动+点击,曲线滑动
–pct-majornav:主要导航事件,比如回退按键、菜单按键:

maxim

https://github.com/zhangzhao4444/Maxim
adb push framework.jar /sdcard
adb push monkey.jar /sdcard

adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin tv.panda.test.monkey.Monkey -p com.panda.videoliveplatform --uiautomatormix --running-minutes 60 -v -v

stf

启动

docker run -d --name rethinkdb -v /srv/rethinkdb:/data --net host rethinkdb rethinkdb --bind all --cache-size 8192 --http-port 8090

docker run -d --name stf --net host openstf/stf stf local --allow-remote

获取dom结构

windows
adb shell “uiautomator dump && cat /sdcard/window_dump.xml” | clip
adb shell “uiautomator dump && cat /sdcard/window_dump.xml” > tmp.xml
Mac
adb shell “uiautomator dump && cat /sdcard/window_dump.xml” | pbcopy

selenium Grid

官网:https://www.selenium.dev/downloads/
hub
java -jar selenium-server-standalone-3.141.59.jar -role hub
node
java -jar selenium-server-standalone-3.141.59.jar -role node -port 5677

配置文件启动node

java -jar selenium-server-standalone.jar -role node -nodeConfig node1Config.json
https://www.selenium.dev/documentation/en/grid/setting_up_your_own_grid/

耗电量

git clone https://github.com/google/battery-historian.git
cd battery-historian
go get -d -u github.com/google/battery-historian/
go run setup.go
go run cmd/battery-historian/battery-historian.go

  1. 清理耗电量数据
    adb shell dumpsys batterystats --reset
    adb shell dumpsys batterystats --enable full-wake-history
  2. 运行测试用例/手工操作
  3. 收集数据
    Android 7.0:adb bugreport bugreport.zip
    Android6.0:adb bugreport > bugreport.txt

弱网

网络流量

Active interfaces:
iface=wlan0 ident=[{type=WIFI, subType=COMBINED, networkId=“GoogleGuest”}]
Active UID interfaces:
iface=wlan0 ident=[{type=WIFI, subType=COMBINED, networkId=“GoogleGuest”}]

adb shell dumpsys package com.xueqiu.android | grep userId
userId=10007 gids=[3003, 1028, 1015]

app启动性能

adb shell am force-stop $package
adb shell screenrecord --bugreport --time-limit 30 /data/local/tmp/xueqiu.mp4 &
adb shell am start -S -W $package/.view.WelcomeActivityAlias
wait
adb pull /data/local/tmp/xueqiu.mp4 .
ffmpeg -i xueqiu.mp4 xueqiu.gif
ffmpeg -i xueqiu.mp4 -r 10 frames_%03d.jpg

CPU统计

H5 性能分析

appium/selenium的ExecuteScript Api
注⼊js
return JSON.stringify(window.performance.timing)
JSON.stringify(window.performance.getEntriesByName (document.querySelector(“img”).src)[0], null, 2)

postman

官网地址 https://www.postman.com/

接口测试框架

数据驱动

jmeter安装

jmeter分布式

influxDB

InfluxDB 是一个用 Go 语言开发的开源分布式时序数据库。
新建容器网络:docker network create grafana
运行容器:docker run -d --name=influxdb --network grafana -p 8086:8086 -v ${PWD}/influxdb/:/var/lib/influxdb/ influxdb:1.7.10
创建数据库
第一种方式:curl -i -XPOST http://localhost:8086/query --data-urlencode “q=CREATE DATABASE jmeter”
第二种方式:docker exec -it influxdb influx,执行语句 create database jmeter;
简单使用
show databases;
use jmeter;
show measurements;
select * from jmeter limit 3;

性能监控体系

部署Prometheus
配置文件:https://github.com/prometheus/prometheus/blob/master/documentation/examples/prometheus.yml
运行:docker run -d --name prometheus --network grafana -p 9090:9090 -v ${PWD}/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus:v2.16.0 --config.file=/etc/prometheus/prometheus.yml

部署node_exporter

下载地址: https://github.com/prometheus/node_exporter/releases

配置Grafana

配置 Prometheus 数据源
配置面板:https://grafana.com/grafana/dashboards/8919

docker file

常用指令

FROM:基础镜像,FROM 命令必须是 Dockerfile 的首个命令。
LABEL:为镜像生成元数据标签信息。
USER:指定运行容器时的用户名或 UID,后续 RUN 也会使用指定用户。
RUN:RUN 命令是 Dockerfile 执行命令的核心部分。它接受命令作为参数并用于创建镜像。每条 RUN 命令在当前基础镜像上执行,并且会提交一个新镜像层。
WORKDIR:设置 CMD 指明的命令的运行目录。为后续的 RUN、CMD、ENTRYPOINT、ADD 指令配置工作目录。
ENV:容器启动的环境变量。
ARG:构建环境的环境变量。
COPY:复制文件
CMD:容器运行时执行的默认命令。
ENTRYPOINT:指定容器的“入口”。
HEALTHCHECK:容器健康状态检查。

Jenkinsfile语法

Declarative pipeline 示例代码

pipline{
agent{
		node{
				label "myslave"
				customWorkspace "myWorkspace"
		}
}
}

Declarative pipeline 示例代码

stages{
stage('git pull souce code'){
		steps{
				echo "sync updated code"
				git "https://github.com/princeqjzh/iPipeline.git"
		}
}
}

Declarative pipeline 示例代码

 post {
        success {
            echo 'goodbye pipeline success!'
            sleep 2
        }
        always {
            echo 'always say goodbye'
        }
    }

Declarative pipeline 示例代码

    environment {
        hlw = 'hello world'
    }
    stages {
        stage('Print environment_1'){
            steps {
                echo hlw
            }
        }
}
   options {
        timeout(time: 30, unit: 'SECONDS')
			  buildDiscarder(logRotator(numToKeepStr: '2'))
        retry(5)
    }
 parameters {
        string(name: 'PERSON', defaultValue: 'Jenkins', description: '输入的文本参数')
    }
    stages {
        stage('Test Parameters'){
            steps {
                echo "Hello ${params.PERSON}"
            }
        }
    }

Jenkinsfile 语法 Scripts pipeline

流程控制之 – if/else
node {
    stage('Example') {
        if (env.BRANCH_NAME == 'master') {
            echo 'I only execute on the master branch'
        } else {
            echo 'I execute elsewhere'
        }
    }
}
流程控制之 – try/catch
    node{
        echo "This is test stage which run on the slave agent."
        try {
            echo "This is in the try block."
        }catch (exc) {
            echo "Something failed, I'm in the catch block."
        }finally {
            echo "Finally, I'm in the finally block."
        }
    }

pipline

pipeline {
	agent any 
	stages { 
		stage('begin'){
 			steps { 
				echo 'Hello pipeline' 
				}
 		}
 	}
	post { 
		always {
 			echo 'say goodbay'
 			}
 	}
 }

测试平台开发

测试平台前端

vue.js 安装

  1. CDN
    image

  2. NPM
    通过webpack和CLI安装使用

安装node.js环境

https://nodejs.org/zh-cn/download/

组件库的使用

ElementUI
https://element.eleme.io/#/
BootstrapVue
https://bootstrap-vue.org/
Vuetify
https://vuetifyjs.com/zh-Hans/

axios

官方网址:http://www.axios-js.com/

安装

$ npm install axios

VSCode插件

Vetur:VSCode支持VUE的工具,有语法高亮、格式化、错误检查、自动完成等功能。

JavaScript (ES6) code snippets:包含VSCode的ES6语法中的JavaScript代码段。

(推荐)Auto Close Tag:自动添加HTML/XML结束标签。
(推荐)Auto Rename Tag:自动重命名对应的HTML/XML标签。

Highlight Matching Tag:突出显示匹配的开始和结束标签。

测试平台后端

Jenkins调用

Jenkins调用-maven依赖

<dependency>
            <groupId>com.offbytwo.jenkins</groupId>
            <artifactId>jenkins-client</artifactId>
            <version>0.3.8</version>
 </dependency>

常用类-JenkinsHttpClient

  • 封装了调用JenkinsAPI的底层方法。
  • JenkinsHttpClient(URI uri, String username, String password)
  • get(String path)
  • getFile(URI path)
  • post(String path, boolean crumbFlag)
  • post(String path, D data, Class cls)
  • post_xml(String path, String xml_data, boolean crumbFlag)
    等等

常用类-JenkinsServer

  • 封装了调用JenkinsAPI的语义级别的方法。
  • JenkinsServer(JenkinsHttpConnection client)
  • getJob(String jobName)
  • createJob(String jobName, String jobXml, Boolean crumbFlag)
  • updateJob(String jobName, String jobXml, boolean crumbFlag)
  • getJobXml(String jobName)
  • deleteJob(FolderJob folder, String jobName, boolean crumbFlag)
    等等

常用类-Job

  • Jenkins中job对应的实体类,有很多实用的语义级别的方法。
  • Job(String name, String url)
  • build(Job job)
  • build(Job job, Map<String, String> params)
  • getFileFromWorkspace(String fileName)
  • setClient(JenkinsHttpConnection client)

springboot

  1. 进入 https://start.spring.io/

  2. 使用IDE的插件进行快速创建

restful风格的接口实现方式

  1. SpringBootApplication:springboot主类,用来加载springboot各种特性

  2. RestController:Spring会转换返回值并自动将其写入HTTP响应

  3. RequestMapping: 用于类和方法,在方法级别时,用于处理HTTP 的各种方法

  4. RequestBody:将request body中的json/xml对象解析成该参数类型的Javabean对象

  5. PathVariable:处理动态的 URI,URI 的值可以作为控制器中处理方法的参数

  6. Post/Put/Get/DeleteMapping:在方法的级别上使用,在方法级别时,用于处理HTTP 的各种方法

  7. RequestParam:处理get请求的参数

lombok使用

<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
 </dependency>

集成swagger-配置类

@Configuration
@EnableSwagger2
public class SwaggerConfig {

}

集成swagger-配置项

@Bean
public Docket docket() {
 		//header
		//apiInfo
}

private ApiInfo apiInfo() {
}

常用配置介绍

server:
  port: 8093
  connection-timeout: 18000000
  servlet
     session:
      timeout: 30m #30分钟,测试的话时间不能太短,否则不准。m(分钟),s(秒),h(小时),不写单位默认毫秒
spring:
  application:
    name: aitest

springboot多环境配置

<profiles>
        <!--开发环境-->
        <profile>
            <id>dev</id>
            <properties>
                <spring.profiles.active>dev</spring.profiles.active>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
</profiles>

简单运行脚本

test_start_8097.sh
nohup java -Xms256m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=128m  -server -Dserver.port=8012 -jar aitest-mini.jar 'aitest-mini' --spring.profiles.active=dev  >>./test_info_8097.log 2>&1 &
  • ps -ef | grep aitest-mini #查询已经存在的aitest-mini进程,进程号为10179
  • kill -9 10179 # 停止该进程
  • sh test_start_8099.sh #执行启动命令
  • tail -f test_info_8099.log #实时查看服务输出日志

Cors跨域资源共享
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS

数据持久化技术

mybatis配置

  • springboot集成mybatis配置
  • mybatis相关配置
  • sql语句打印配置

@MapperScan(“com.hogwartstest.aitestmini.dao”)

tk.mybatis使用-mapper统一父类

mybatis的mapper的统一父类,用于简单sql语句的快速编码

public interface MySqlExtensionMapper<T> extends Mapper<T>, MySqlMapper<T>, IdsMapper<T> {
}

持久化常见注解

  • Table:表对应的实体类标识,name属性为表名

  • Id:主键标识

  • GeneratedValue(strategy = GenerationType.IDENTITY):配置主键为自增策略

  • Column:列名标识,当类属性与表字段不符时,用name属性标识表字段

  • Transient:标识此字段不进行持久化

mybatis常见特性

  • #{createUserId}

  • ${createUserId}

  • concat(‘%’, #{params.caseSign}, ‘%’):MySQL函数,返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。

36 个赞

精华 :smile:

很全

springboot 这个是录播课程里面新增的内容吗?直播课程里面好像没这个课程呀

1 个赞

git和数据库相关的课程怎么没找到呢?图片

3 个赞

写的很全 ,后面忘记了可以随时检索查到

棒棒的

这也太优秀了

加多一个shell脚本,性能监控系统实战里面的shell脚本:
https://github.com/princeqjzh/meican/blob/master/jmx/auto_stress_emenu.sh

LiteMall商品搜索接口测试用例.xlsx (12.6 KB)
对应录播-接口测试实战练习

前端 vue 项目录播代码

链接: https://pan.baidu.com/s/1gl2Ff3kg4l_Z_1Uj4DmTAw 提取码: nne8

目录说明

  • VueDemo:Vue 常用指令、Vue 基础架构、Vue 生命周期
  • test_prac:Vue 页面组件、Vue 页面布局、Vuetify 组件使用、Vue 路由
  • test_fronted:实战练习