其他测试框架 强大的全新 Web UI 测试框架 Cypress - 调用 Python 脚本

非洲赵子龙 for Cypress · February 14, 2019 · Last by zhang replied at March 07, 2019 · 900 hits

Python几乎无所不能,深得大家喜爱,这里介绍Cypress如何调用Python脚本的输出.
比如,现在要测试一个场景:web的搜索功能。那么大概步骤就是:用python获取数据库存储的正确结果,比对在web界面上搜出来的结果,如果二者吻合,那说明搜索功能正常工作,反之亦然。为什么不直接用JS操作数据库呢?因为我又要去熟悉JS的关于数据库操作的相关支撑库,麻烦啊(#doge)!当然,麻烦归麻烦,最好的方案还是用JS本身的相关支撑库.
这里权当举了一个不恰当的栗子吧!

  • 写Python关于数据库的相关操作 很简单,但还是写下来吧!
import sys, pymysql
import urllib.parse
import datetime


def get_data(result):
res = []
for i in result:
temp = []
for j in i:
if isinstance(j, datetime.datetime):
t = j.strftime("%Y-%m-%D %H:%M:%S")
elif not j:
t = "None"
else:
t = j
temp.append(urllib.parse.quote(t))
res.append(temp)
return res


def connect(schema):
db = pymysql.connect("your_server_ip", "your_db_username", "you_db_pwd", schema, charset='utf8')
cursor = db.cursor()
return db, cursor


def disconnect(cursor):
cursor.close()


def sql_query(argv):
db, cur = connect(argv[1])
try:
cur.execute(argv[2])
result_list = cur.fetchall()
res = get_data(result_list)
# 这里用print就行了,cypress可以获取python打印的内容
print(res)
except Exception as e:
raise e
finally:
disconnect(cur)
return result_list


if __name__ == "__main__":
sql_query(sys.argv)

把这个python文件放到你Cypress项目的某个目录下,比如:Helper/test.py.

  • 写一个文件路径获取函数,用于在用例的可以随时查找所需要的文件的绝对路径
const path = require("path");
export function getScriptPath(scriptName){
console.log(__filename);
var scriptPath = path.join(__dirname, "../Helper", scriptName);
return scriptPath;
}
  • 编写测试用例
import * as Helper from "../../fixtures/Helper/Helper";
...
// only表示只运行当前用例
it.only("创建角色", function() {
var l = new Array();
l.push(
"/usr/local/bin/python3.6",
Helper.getScriptPath("test.py"),
"your_scheme",
"your_sql"
);
var command = l.join(" ");
// 把python的输出内容通过result传递到下一步,就可以随便玩了.
cy.exec(command).then(result => {
var a = result.stdout;
// 示例:打印出来
console.log(decodeURIComponent(a));
});
});
...
...

这样一来,Python的输出结果就被JS成功的解析了,Python+JS这开发效率简直不要太酸爽!
PS:一定要在该注释的地方打好注释哦!方便维护嘛!

Cypress入门系列:

注:目前官方团队正在开发Python版本,同样的Free to use,对JS恐惧的同学不妨等一等,或者直接JS上手,非常简单,VSCode装上之后,你会爱上Cypress和JS,笔者会慢慢介绍各种Web UI自动化复杂场景下Cypress的强大应对,目前还没发现Cypress无法处理的问题!欢迎一起入坑!QQ群:947886065.

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