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