pytest 使用

pytest

1
pip install pytest
  • fixtures
  • mark

module setup

class setup

method setup

function setup

PyCharm-中使用-pytest

Preferences—>Tools—>Python Integrated Tools

Testing—>Default test runner:pytest

pytest 插件

  • pytest-sugar pip install pytest-sugar

  • pytest-assume pip install pytest-assume

  • pytest-ordering pip install pytest-ordering
    • pytest-rerunfailures pip install pytest-rerunfailures
  • pytest-cov pip install pytest-cov

参考

pytest的一些实用插件实践

Docker 运行Zentao

1
docker pull haha123/zentao:latest # zentao 9.2.1
1
docker run  -p 8800:80 -v ~/docker/zentao:/opt/zbox -d --name zentao-9.2.1 --restart=always haha123/zentao:latest

访问:

默认user/passwd: admin/123456

参考

haha123/zentao

Docker 运行SonarQube

1
docker pull sonarqube:7.1
1
docker run -d --name sonarqube-7.1 -p 9000:9000 -p 9092:9092 sonarqube:7.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
docker run -d \
--name postgres \
-e POSTGRES_USER=sonarqube \
-e POSTGRES_PASSWORD=sonarqube \
-e PGDATA=/var/lib/postgresql/data/pgdata \
-v $PWD/postgresql:/var/lib/postgresql/data \
postgres

# 新建目录
mkdir sonarqube_data sonarqube_extensions sonarqube_logs

#linux 执行
chown -R 999:999 sonarqube_data sonarqube_extensions sonarqube_logs

#docker启动sonarqube
docker run -d --name sonarqube --privileged=true -p 9000:9000 -p 9092:9092 --link postgres:db \
-e SONARQUBE_JDBC_USERNAME=sonarqube -e SONARQUBE_JDBC_PASSWORD=sonarqube \
-e SONARQUBE_JDBC_URL="jdbc:postgresql://db/sonarqube" \
-v $PWD/sonarqube_data:/opt/sonarqube/data \
-v $PWD/sonarqube_extensions:/opt/sonarqube/extensions \
-v $PWD/sonarqube_logs:/opt/sonarqube/logs \
sonarqube

启动后访问http://localhost:9000就可以进入sonar了, 默认管理员用户和密码是admin/admin

安装插件

举个栗子,我们安装一个汉化插件:Chinese Pack

进入Administration->Marketplace

搜索Chinese Pack,点击install。

使用 Sonar maven插件进行代码解析

使用前提:

  • 需要maven版本3.0.2及以上。
  • 安装好SonarQube。
  • 使用了已安装的SonarQube支持的最低的JDK。
  • 已经安装好了你要分析的语言的插件。

参考

使用 Sonar 进行代码质量管理

SonarQube代码质量检查工具

Sonar入门学习

Appium 配置

macOS

环境

  • 下载 Xcode
  • 安装 xcode-command-tools
  • 配置 npm

  • 配置 node

  • Android
    • JDK 1.8.144
    • Android SDK
  • iOS
    • Carthage

selendroid android.4.4 以下,UI Automation Android 4.4以上

Appium Desktop

Download Appium Desktop

安装 Appium

1
npm install -g appium

PATH变量:~/.bash_profile

1
2
3
4
5
6
7
8
9
10
11
12
# JAVA_HOME start
export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.
export CLASS_PATH=$JAVA_HOME/lib
# JAVA_HOME end

# ANDROID_HOME start
export ANDROID_HOME="$(echo $HOME)"/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$ANDROID_HOME/platform-tools
export PATH=$PATH:$ANDROID_HOME/build-tools/28.0.2
# ANDROID_HOME end

检查appium环境配置

1
appium-doctor

安装不同版本appium

1
2
npm view appium version --json
npm install appium@x.x.x

源码安装

Appium 源码分析

Docker 方式

Appium Docker for Android

拉取 Appium 镜像

1
docker pull appium/appium:1.9.1-p0

appium-emulator

1
docker pull appium/appium-emulator:1.1-arsenal

运行

1
docker run --privileged -d -p 4723:4723  -v /dev/bus/usb:/dev/bus/usb --name appium-1.9.1-p0 appium/appium:1.9.1-p0

Ubuntu 下不要安装 adb,如果安装过请卸载。

  • --privileged:特权模式

  • --v /dev/bus/usb:/dev/bus/usb:挂载 usb 设备

基于Docker配置Appium实践 | pilipala195

参考

通过代理安装 appium

Docker 配置 Jira

Jira

下载镜像

1
2
docker pull mysql:5.7.29
docker pull atlassian/jira-software:8.5.0

配置 MySQL 数据库

jira.cnf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[mysqld]
bind-address = 0.0.0.0
default-storage-engine=INNODB
character_set_server=utf8mb4
innodb_default_row_format=DYNAMIC
innodb_large_prefix=ON
# default value: innodb_file_format=Barracuda
innodb_log_file_size=2G

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

jira.sql

1
2
3
4
5
6
7
DROP DATABASE IF EXISTS `jira`;

CREATE DATABASE jira CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,REFERENCES,ALTER,INDEX on jira.* TO 'jira'@'%' IDENTIFIED BY 'jira';

flush privileges;

运行数据库

1
docker run -d --name jira-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -v ${PWD}/Shanghai:/etc/localtime:ro -v ${PWD}/jira.cnf:/etc/mysql/conf.d/jira.cnf -v ${PWD}/jira.sql:/docker-entrypoint-initdb.d/jira.sql mysql:5.7.29

配置 Jira

Supported platforms

下载 MySQL Connector/J 5.1 driver

Jira 连接 MySQL 参数

jira.env

1
2
3
4
5
6
'ATL_JDBC_URL=jdbc:mysql://address=(protocol=tcp)(host=mysql)(port=3306)/jiradb?useUnicode=true&characterEncoding=UTF8&sessionVariables=default_storage_engine=InnoDB&useSSL=false'
'ATL_JDBC_USER=jira'
'ATL_JDBC_PASSWORD=jira'
'ATL_DB_DRIVER=com.mysql.jdbc.Driver'
'ATL_DB_TYPE=mysql'
'ATL_DB_SCHEMA_NAME=public'

运行 Jira

1
docker run -d --name jira --link jira-mysql:mysql -p 8080:8080 -e JVM_SUPPORT_RECOMMENDED_ARGS="-Duser.timezone=Asia/Shanghai" -e JVM_MINIMUM_MEMORY=2048m -e JVM_MAXIMUM_MEMORY=4096m -v ${PWD}/mysql-connector-java-5.1.48-bin.jar:/opt/atlassian/jira/lib/mysql-connector-java-5.1.48-bin.jar atlassian/jira-software:8.5.0
1
docker run -d --name jira1 --link mysql:mysql -p 8081:8080 -e JVM_SUPPORT_RECOMMENDED_ARGS="-Duser.timezone=Asia/Shanghai" -e JVM_MINIMUM_MEMORY=2048m -e JVM_MAXIMUM_MEMORY=4096m -v ${PWD}/mysql-connector-java-5.1.48-bin.jar:/opt/atlassian/jira/lib/mysql-connector-java-5.1.48-bin.jar --env-file=${PWD}/jira.env atlassian/jira-software:8.5.0

源码构建

1
2
3
git clone https://github.com/cptactionhank/docker-atlassian-jira.git

cd docker-atlassian-jira

Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
FROM openjdk:8

# Configuration variables.
ENV JIRA_HOME /var/atlassian/jira
ENV JIRA_INSTALL /opt/atlassian/jira
ENV JIRA_VERSION 7.12.1
# 定义临时文件夹,用于存放上传的文件
ENV TEMP_PATH /temp/jira

# 准备JIRA的安装工作
# 1. 创建/temp/jira临时目录
# 2. 将需要的文件上传到临时文件,有破解文件和JIRA的安装包等等
# 3. 将sources.list.163文件上传,用于替换成163源
# To Ready JIRA
RUN mkdir /temp && mkdir /temp/jira
COPY mysql-connector-java-5.1.42-bin.jar /temp/jira/mysql-connector-java-5.1.42-bin.jar
COPY postgresql-42.2.1.jar /temp/jira/postgresql-42.2.1.jar
COPY atlassian-extras-3.2.jar /temp/jira/atlassian-extras-3.2.jar
COPY atlassian-jira-software-${JIRA_VERSION}.tar.gz /temp/jira/atlassian-jira-software-${JIRA_VERSION}.tar.gz
COPY 163.com.sources.list /temp/jira/163.com.sources.list

# 安装JIRA的运行命令,主要做了以下工作:
# 1. 将debain的原始源替换成国内的163源
# 2. 将下载获取JIRA更换为上传JIRA的源码包,因为下载JIRA的速度实在有点感人
# Install Atlassian JIRA and helper tools and setup initial home
# directory structure.
RUN set -x \
&& mv /etc/apt/sources.list /etc/apt/sources.list.back \
&& cp "${TEMP_PATH}/163.com.sources.list" /etc/apt/sources.list \
# && echo "deb http://mirrors.163.com/debian jessie-backports main" > /etc/apt/sources.list.d/jessie-backports.list \
&& apt-get update --quiet \
&& apt-get install --quiet --yes --no-install-recommends xmlstarlet \
&& apt-get install --quiet --yes --no-install-recommends -t jessie-backports libtcnative-1 \
&& apt-get clean \
&& mkdir -p "${JIRA_HOME}" \
&& mkdir -p "${JIRA_HOME}/caches/indexes" \
&& chmod -R 700 "${JIRA_HOME}" \
&& chown -R daemon:daemon "${JIRA_HOME}" \
&& mkdir -p "${JIRA_INSTALL}/conf/Catalina" \
&& cp "${TEMP_PATH}/atlassian-jira-software-${JIRA_VERSION}.tar.gz" "./atlassian-jira-software-${JIRA_VERSION}.tar.gz" \
&& tar -zxvf "./atlassian-jira-software-${JIRA_VERSION}.tar.gz" --directory "${JIRA_INSTALL}" --strip-components=1 --no-same-owner \
&& cp "${TEMP_PATH}/mysql-connector-java-5.1.42-bin.jar" "${JIRA_INSTALL}/lib/mysql-connector-java-5.1.42-bin.jar" \
&& rm -f "${JIRA_INSTALL}/lib/postgresql-9.1-903.jdbc4-atlassian-hosted.jar" \
&& cp "${TEMP_PATH}/postgresql-42.2.1.jar" "${JIRA_INSTALL}/lib/postgresql-42.2.1.jar" \
&& chmod -R 700 "${JIRA_INSTALL}/conf" \
&& chmod -R 700 "${JIRA_INSTALL}/logs" \
&& chmod -R 700 "${JIRA_INSTALL}/temp" \
&& chmod -R 700 "${JIRA_INSTALL}/work" \
&& chown -R daemon:daemon "${JIRA_INSTALL}/conf" \
&& chown -R daemon:daemon "${JIRA_INSTALL}/logs" \
&& chown -R daemon:daemon "${JIRA_INSTALL}/temp" \
&& chown -R daemon:daemon "${JIRA_INSTALL}/work" \
&& sed --in-place "s/java version/openjdk version/g" "${JIRA_INSTALL}/bin/check-java.sh" \
&& echo -e "\njira.home=$JIRA_HOME" >> "${JIRA_INSTALL}/atlassian-jira/WEB-INF/classes/jira-application.properties" \
&& touch -d "@0" "${JIRA_INSTALL}/conf/server.xml"

# 使用补丁包替换掉原来的JAR包
# Hack
RUN set -x \
&& rm -rf "${JIRA_INSTALL}/atlassian-jira/WEB-INF/lib/atlassian-extras-3.2.jar" \
&& cp "${TEMP_PATH}/atlassian-extras-3.2.jar" "${JIRA_INSTALL}/atlassian-jira/WEB-INF/lib/atlassian-extras-3.2.jar"

# Use the default unprivileged account. This could be considered bad practice
# on systems where multiple processes end up being executed by 'daemon' but
# here we only ever run one process anyway.
USER daemon:daemon

# Expose default HTTP connector port.
EXPOSE 8080

# Set volume mount points for installation and home directory. Changes to the
# home directory needs to be persisted as well as parts of the installation
# directory due to eg. logs.
VOLUME ["/var/atlassian/jira", "/opt/atlassian/jira/logs"]

# Set the default working directory as the installation directory.
WORKDIR /var/atlassian/jira

COPY "docker-entrypoint.sh" "/"
ENTRYPOINT ["/docker-entrypoint.sh"]

# Run Atlassian JIRA as a foreground process by default.
CMD ["/opt/atlassian/jira/bin/start-jira.sh", "-fg"]
1
docker build -t atlassian/jira:7.12.1 .
1
chown -R 2:2 /data/docker/jira
1
docker run -p 8088:8080 -v /data/docker/jira:/var/atlassian/jira -d --name jira-7.12.1 atlassian/jira:7.12.1

破解jira

先关闭jira,然后把破解包里面的atlassian-extras-3.2.jar和mysql-connector-java- 5.1.42-bin.jar两个文件复制到/usr/local/atlassian/jira/atlassian-jira/WEB-INF/lib/目录下。

其中atlassian-extras-3.2.jar是用来替换原来的atlassian-extras-3.1.2.jar文件,用作破解jira系统的。

而mysql-connector-java- 5.1.42-bin.jar是用来连接mysql数据库的驱动软件包。

1
cd /opt/atlassian/jira/atlassian-jira/WEB-INF/lib/

JIRA Software (Server): Evaluation

1
2
3
4
5
6
7
8
AAABdQ0ODAoPeNp9kU9vgkAQxe98CpJe2sMSIG2tJiS1sDU0CEZsbZpetjjqNrKQ2QXrty8CjVr/H
Iflzfu9N1dTmOkx5Lp5p9tWz+72TFN3vYlum9aDtkAAsczyHNAIeAJCAp1xxTPh0HBCx6OxH1MtL
NIvwGj+KgGlQyzNzYRiiQpZCk5WrpmAx0XK+MpIslT75siMI8mowGTJJHhMgbP1JmaXmPda6zrZ5
FCvc6PhkI5dvx/8PdGfnONmp7PMra5FoMPK9pghBiwBfc95eh6MyAcdDEg4jfskCN+jBjDHbFYky
tgORGZztWYIRrWRl+AoLKD57XwpJ6o7FaLiEwoEE8mZIBdojkpsfapcge/FNCSBZdudjt251arJO
fxyYXGsGCpAZ85WErQIF0xwyeqER1W6CPXL/8OtGpa3Cm2rsw8KgSoz5shl26UHMkGe1w4v/rivx
y2Kft2c6uazp9OSrYraq2E/d4xTNe+b7+t2O5v5F6LlDH4wLAIUCfrbZmVmXsLs8QU/ckLP/eLCD
JsCFCRRqQYfO2gW3mlydfYyj5FIcjiYX02i6

JIRA Core (Server): Evaluation

1
2
3
4
5
6
7
AAABVQ0ODAoPeNp1kdtOg0AQhu95ChJv9GIbDtYekk2ssIkYSitUmxhv1u1U18BClgXt27tAm1axl
3P65/tnLtawMRMoTGtoOtbUcafuyPT8lQ7ssRFV2RvIxfapBFliZBteLhRlKqIZ4Lz+ogJu3zPK0
wHLM+OTSzooZL6pmBo0AWK5hEFPpO3rZZeVZB+0BJ8qwM12ZE2QdWOEnIEoYbUroF3rLeZzEnvBL
DyUyHfB5e44Z1vN3B6VzDVenzUBWYMMfHx3P3tEy3A4RC8TN0HX8To+ZyRRVCqQeEvTErqmA8GGK
54LTKIViZdxkJBzGpqI14CVrMDQZEKBoIKdsbBX15Rh4CckQqHtOKORNXYNHeHfmYV8p4KXtAXp+
fUktJW/1027Fc/6Cc2cY/hQMsmLVuUhiGemp7HNy+5eV69Tk9Q0rVqtzuOpo9Ob/Pew42zX/wNzj
NUrMCwCFEEnmeijjMtt7NE0TXO1VXvHnosCAhRApci+OpA4MTtE0d/t7LAIH4gmkw==X02gs

Nginx 配置反向代理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  location / {
proxy_pass_request_headers on;
proxy_set_header Host $host;
proxy_redirect http:// https://;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect http:// https://;
proxy_pass http://127.0.0.1:38081/;
client_max_body_size 10M;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
# Required for new HTTP-based CLI
proxy_http_version 1.1;
proxy_request_buffering off;
}

遇到问题:XSRF check failed,使用的https协议。

基本URL 设置为 https://jira.xxx.com

1
2
3
4
5
6
7
8
9
10
docker run -d \
--name jira \
--hostname jira \
-e JVM_SUPPORT_RECOMMENDED_ARGS="-Duser.timezone=Asia/Shanghai" \
-p 38081:8080 \
-e atl_proxy_name=jira.xxx.com \
-e atl_proxy_port=443 \
-e atl_tomcat_scheme=https \
-e X_PATH=/ \
atlassian/jira-software

配置nginx反向代理jira并实现https - 暖夏未眠丶 - 博客园

参考

烂泥:jira7.3/7.2安装、中文及破解(20170829更新)

CentOS_7_Jira7.4.1安装部署_及破解

Docker JIRA 7.3.8 破解部署

Docker+centos7+jira7.3.6+postgre Sql破解搭建

docker入门到实战(5)安装mysql容器

frp 使用

frp

服务端

下载 frp

1
wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_amd64.tar.gz

使用tar指令解压tar.gz文件

1
tar -zxvf frp_*_linux_amd64.tar.gz -C /usr/local/

使用cd指令进入解压出来的文件夹

1
cd /usr/local/frp_*_linux_amd64/

外网主机作为服务端,可以删掉不必要的客户端文件,使用rm指令删除文件。

1
rm -f frpc frpc.ini

接下来要修改服务器配置文件,即frps.ini文件。使用vi指令对目标文件进行编辑。

1
vi frps.ini

打开frps.ini后可以看到默认已经有很多详细的配置和示范样例,该文章仅以达到内网穿透为目的,所以这里选择删掉或注释掉里面的所有内容,然后根据群晖的情况,按照官方的中文文档添加以下配置。(这里的操作都使用vi命令,关于vi命令的使用方式这里不作详细介绍,可以自行搜索相关使用方法。)

1
2
3
[common]
bind_port = 7000
vhost_http_port = 8080

[common]部分是必须有的配置,其中bind_port是自己设定的frp服务端端口,vhost_http_port是自己设定的http访问端口。

保存上面的配置后,使用以下指令启动frp服务端。

1
2
3
4
5
6
7
8
#新建会话
screen -dmS frp

#然后进入这个会话。
screen -r frp

#执行命令
./frps -c ./frps.ini &

systemd 方式后台运行。

客户端

下载 frp

1
2
3
4
5
6
7
wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_amd64.tar.gz

tar -zxvf frp_*_linux_amd64.tar.gz -C /usr/local/

cd /usr/local/frp_*_linux_amd64

rm -f frps frps.ini

配置

vi frpc.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[common]
server_addr = x.x.x.x
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

[nas]
type = http
local_port = 5000
custom_domains = no1.sunnyrx.com

[web]
type = http
local_port = 80
custom_domains = no2.sunnyrx.com

上面的配置和服务端是对应的。

[common]中的server_addr填frp服务端的ip(也就是外网主机的IP),server_port填frp服务端的bind_prot

[ssh]中的local_port填群晖的ssh端口。

[nas]中的type对应服务端配置。local_port填群晖的DSM端口。custom_domains为要映射的域名,记得域名的A记录要解析到外网主机的IP。

[web]同上,local_port填群晖的web端口。这里创建了两个http反向代理是为了分别映射群晖两个重要的端口,500080,前者用于登录群晖管理,后者用于群晖的Web StationDS Photo

运行frp客户端

1
./frpc -c ./frpc.ini

现在可以用SSH通过外网主机IP:6000和群晖建立SSH连接。通过浏览器访问no1.sunnyrx.com:8080打开群晖nas的管理页面,访问no2.sunnyrx.com:8080打开群晖Web Station的网站,DS Photo app可以连接no2.sunnyrx.com:8080进入DS Photo管理。

使用nohup指令

nohup指令的使用方法相对简单,只需要在nohup后面加上frp的运行指令即可。下面示范的指令是运行frp客户端。(同样,如果之前断开了SSH连接,记得用cd指令进入frp的目录先。)

1
nohup ./frpc -c ./frpc.ini &

参考

frp 中文文档

使用frp实现内网穿透 群晖NAS+frp发挥更大作用

本地 STF 内网穿透公网访问 · TesterHome

阿里云服务器实现 frp 内网穿透 | WooOh’s blog

,