Jenkins + selenium + pytest + allure 自动化测试

Submitted by Lizhe on Mon, 06/24/2019 - 11:04

本篇文章将描述如何使用 jenkins,selenium,pytest 和 allure 运行自动化测试并且生成 allure 报告

我们知道 selenium 需要使用能够相互兼容的 driver 和 chrome 才能正确工作,不兼容的版本之间会造成各种古怪问题

所以这里我直接使用了 joyzoursky/python-chromedriver:3.7-selenium 镜像作为base,但是这个镜像没有安装 allure

所以用这个镜像作为base我创建了一个自己的镜像 ibaibai/selenium-runner 

Jenkinsfile

def label = "mypod-${UUID.randomUUID().toString()}"

podTemplate(label: label, yaml: """

kind: Pod

metadata:

  name: selenium-runner

akeneo installation

Submitted by Lizhe on Wed, 06/19/2019 - 15:54

akeneo 这里使用的是 docker 方式

使用docker方式的话需要 docker compose 

先从下面地址下载

git clone https://github.com/akeneo/pim-community-standard.git

 里面包含了文件 docker-compose.yml

cd 到 文件所在 的文件夹中

下面内容中的 mysql 被我使用 db 替换掉了,因为我本地的mysql配置不好用,可以直接删除,这里只是为了展示原始内容

version: '3'

 

services:

  fpm:

    image: 'akeneo/fpm:php-7.2'

    user: 'docker'

    volumes:

CA证书和Ingress (7) HSTS

Submitted by Lizhe on Wed, 04/24/2019 - 16:44

 

最近一直在测试 ingress 的 https 连接, 所以域名和证书频繁更换, 然后... 今天下午快被 HSTS 恶心死了

症状是换了证书或者地址之后, 浏览器认为是网站被劫持了

HSTS 会做什么呢? 在浏览器第一次访问了 www.bestofgit.com 之后, 如果此时连接被跳转到了https, 并且得到了HSTS的头标识, 那么支持HSTS的浏览器 ( 最新版的chrome ) , 会强制你的浏览器在下次访问的时候使用https连接这个网站 , 并且... 如果证书是不安全的 ( 自签名那种, 没有经过第三方认证的 ) , 那么恭喜你, 你会一直看到下面这个页面

一直到... 天荒地老 ... 当然不是, 一直到 HSTS 头中定义的时间过去, 如果它定义了 1 年, 那么再次恭喜你, 跟天荒地老也差不多了

CA证书和Ingress (6) Ingress 连接 https

Submitted by Lizhe on Wed, 04/24/2019 - 12:42

在之前做的例子中 ( 实际上也是绝大多数情况下 ) , 我们的 ingress 使用 443 端口, 提供了 https , 并且提供了 cert 证书, 然后它连接到后端服务的 80 端口

Ingress 443 => Backend 80

本例中我将尝试使用 Ingress 连接 backend 的 443 端口

Ingress 443 => Backend 443

这里我会使用下面的镜像

 

docker run -p 8080:80 -p 8443:443 --name nginx--rm -t mendhak/http-https-echo

CA证书和Ingress (5) Amazon Linux Certbot

Submitted by Lizhe on Tue, 04/23/2019 - 10:36

 

理论上来说, Amazon Linux 使用的是 Redhat 系的源码 + 自己的一些库 编译的, 也就是说应该和 Redhat/Centos 兼容,

但是实际上你无法直接在 Amazon Linux上直接使用 Certbot

 

[ec2-user@ip-10-1-0-60 ~]$ sudo /usr/local/bin/certbot-auto certonly

Sorry, I don't know how to bootstrap Certbot on your operating system!

 

You will need to install OS dependencies, configure virtualenv, and run pip install manually.

Please see https://letsencrypt.readthedocs.org/en/latest/contributing.html#prerequisites

for more info.

[ec2-user@ip-10-1-0-60 ~]$ 

CA证书和Ingress (4) 手动调用 letsencrypt

Submitted by Lizhe on Tue, 04/23/2019 - 00:20

 

lizhedeMacBook-Pro:lz_study lizhe$ ssh -i id_rsa ubuntu@54.95.179.97

Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-1032-aws x86_64)

 

 * Documentation:  https://help.ubuntu.com

 * Management:     https://landscape.canonical.com

 * Support:        https://ubuntu.com/advantage

 

  System information as of Mon Apr 22 16:19:19 UTC 2019

 

  System load:  0.08               Processes:              179

  Usage of /:   35.1% of 15.45GB   Users logged in:        0

CA证书和Ingress (3) cert-manager 和 letsencrypt

Submitted by Lizhe on Mon, 04/22/2019 - 10:45

这玩意最大的好处就是 renew 是自动的

cert-manager is a Kubernetes addon to automate the management and issuance of TLS certificates from various issuing sources.

It will ensure certificates are valid and up to date periodically, and attempt to renew certificates at an appropriate time before expiry.

环境描述

这里我使用的是 Kubernetes + 我自己的一个独立域名, 运行在 aws 环境上 , ec2 主机的 ip 是 54.95.179.97

除了 cert-manager 安装在 system 命名空间下之外, 所有的资源 ( deployment, service, ingress, issuer, cert ) 全部都安装在 study 命名空间下

需要注意的是命名空间需要提前创建

CA证书和Ingress (2) 在Ingress中使用CA证书

Submitted by Lizhe on Sun, 04/21/2019 - 23:36

上一节中我们创建了一个自签名的CA证书

这一节我要尝试在Ingress中使用它

首先要在Kubernetes中创建 secret

kubectl create secret tls lizheca --key server.key --cert server.crt

然后就可以使用了

对应的Ingress内容为

 

apiVersion: extensions/v1beta1

kind: Ingress

metadata:

name: hello-nginx-ingress

annotations:

kubernetes.io/ingress.class: "nginx"

spec:

tls:

- hosts:

- testca.com

secretName: lizheca

rules:

- host: testca.com

http:

paths:

- backend:

CA证书和Ingress (1) 创建自签名证书

Submitted by Lizhe on Sun, 04/21/2019 - 23:11

最近工作一直在和 Ingress 和 https 打交道, 写个专题记录一下

本篇文章重点关注如何创建自签名证书

1. 首先要生成一个 rsa 密钥

$ openssl genrsa -des3 -out server.key 2048

注意生成密钥时会要求输入最短4位的密码, 这个密码会在访问时弹出一个密码框, 后面我们会删除密码

2. 生成 csr , csr 是申请证书的请求文件

$ openssl req -new -key server.key -out server.csr

这里会要求你输入一些相关信息

Country Name (2 letter code) [AU]:CN

State or Province Name (full name) [Some-State]:Beijing

Locality Name (eg, city) []:Beijing

Organization Name (eg, company) [Internet Widgits Pty Ltd]:lizhe

Go 多线程 (5) RWLock 读写锁

Submitted by Lizhe on Mon, 04/01/2019 - 15:31

读写锁的读行为不会造成同步

但是写行为会同时禁止 读/写 操作

例子很简单, 懒得写了网上找了一个, 下面可以看到读的时候没有阻塞

 

package main

 

import (

    "sync"

    "time"

)

 

var m *sync.RWMutex

 

func main() {

    m = new(sync.RWMutex)

 

    // 多个同时读

    go read(1)

    go read(2)

 

    time.Sleep(2 * time.Second)

}

 

func read(i int) {

    println(i, "read start")

 

    m.RLock()

    println(i, "reading")