背景说明
你进组之后大概率会遇到:组里前辈甩给你一个 pytest 用例文件,让你改改里面的登录账号和密码。你点开一看,满屏的username = "test001"、timeout = 30、is_vip = False啥的。
别急,这就是今天要讲的三样东西:变量、数据类型、字符串。它们占了你以后写测试脚本 80% 的日常操作。
一、基础知识
变量:存储数据的标签。
使用方法:直接定义变量名=变量值,不用声明类型。Python 会自动识别对应的数据类型,数据类型决定这块数据该怎么存储、支持哪些运算。
Python 3.12 里你直接在终端敲:
# 等号左边是变量名,右边是值,Python 自动判断类型 username = "test001" # 字符串 string,存文本 timeout = 30 # 整数 int,存数字 is_vip = False # 布尔 bool,只有 True / False 两个值,注意首字母大写 price = 9.9 # 浮点数 float,带小数点的数💡调试小技巧:使用
type()可以查看变量的数据类型,排查类型问题很实用print(type(username)) # 输出 <class 'str'>
注意:变量名只能是字母、数字、下划线、且不能以数字开头、区分大小写。建议用user_name这种小写加下划线方式定义变量名。
字符串就是一段文字,用单引号或双引号包起来都行。如果字符串内容本身包含双引号,外层就用单引号;内部包含单引号,外层用双引号,避免语法报错。
resp = '{"code":0,"msg":"success"}'几个最常用的字符串操作:
url = "[https://api.xxx.com/login](https://api.xxx.com/login)" # 拼接方式1:+ 拼接,适合简单场景 full = url + "?user=" + username # 拼接方式2:f‑string格式化,测试脚本优先推荐,可读性更好, # 引号里面默认全部当成普通文字原样输出;如果在引号的文本里插入变量,必须用{变量名} full2 = f"{url}?user={username}" # 取长度 print(len(username)) # 输出 7 # 判断是否包含某段文字(断言报错时特别好用) print("login" in url) # 输出 True # 去掉首尾空格,接口返回常有看不见的换行 raw = " test001\n" print(raw.strip()) # 输出 test001关键一步:字符串比较用
==,不是=。=是"赋值",==才是"判断相不相等"。很多人断言写if status = "ok":直接报SyntaxError,就是因为把赋值号当成了判断号。
二、真实工作场景
写接口自动化,基本就是这几样在组合。比如测一个登录接口,你要准备请求参数:
# 测试数据,其实就是几个变量 phone = "13800138000" code = "123456" env = "test" # test 环境 / prod 环境,用变量区分什么叫用变量区分环境? 实际工作会有多套环境:
dev开发环境、test测试环境、pre预发布环境、prod生产环境。 把环境标识抽成变量,配合判断逻辑,只修改这一处变量,脚本就自动切换域名、测试账号,不需要在代码里到处硬编码修改,减少漏改带来的问题。
# 仅修改这一行,即可切换整套脚本运行环境 env = "test" if env == "test": base_url = "[https://test-api.xxx.com](https://test-api.xxx.com)" test_phone = "13800138000" elif env == "pre": base_url = "[https://pre-api.xxx.com](https://pre-api.xxx.com)" test_phone = "13800138001" elif env == "prod": base_url = "[https://api.xxx.com](https://api.xxx.com)" test_phone = "13800138002" else: raise Exception("环境变量错误,请填写 dev/test/pre") login_url = base_url + "/login" body = {"phone": test_phone, "code": "123456"} print(f"当前运行环境:{env},接口地址:{login_url}")⚠️小坑:字符串区分大小写,
env="Test"和env="test"判定结果不一样,团队约定全部小写,避免匹配失效。
然后你从接口拿回返回值,Python 给的是个字符串(或者后面会学的字典)。你需要用字符串方法校验它:
response_text = '{"code":0,"msg":"success"}' # 接口返回的原文 # 判断这次登录到底成没成 if "success" in response_text: print("登录用例通过") else: print("登录用例失败,返回:", response_text)三、避坑经验
- 现象:断言一直失败,明明内容一样却不相等。原因:一边带空格一边没带。解法:比较前,先
.strip()把首尾空白清掉,或者打印repr(text)看真实内容。 - 现象:变量名明明定义了,运行时却
NameError: name 'x' is not defined。原因:要么拼错字母,要么定义在 if 里面、外面取不到。解法:把变量定义在函数或脚本最外层,统一用小写加下划线命名,少踩拼错坑。 - 现象:中文打印出来是乱码
\xe7\x94\xa8。原因:文件编码不是 UTF‑8。解法:用 VS Code 把文件存成 UTF‑8,字符串涉及中文时优先用双引号,跟团队约定保持一致。 - 现象:环境切换不生效。原因:
env变量大小写和判断条件不一致。解法:全部统一小写书写。
下篇预告
下一篇我们讲列表(list)和字典(dict),那才是处理接口返回值时的核心武器。