1.新建Django项目以及项目配置
一、新建app
python manage.py startapp app
二、settings文件配置
# 域名访问权限
ALLOWED_HOSTS = ["*"]
# 数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'demo_database', # 数据库名,先前创建的
'USER': 'root', # 用户名,可以自己创建用户
'PASSWORD': 'demo2021', # 密码
'HOST': '127.0.0.1', # mysql服务所在的主机ip
'PORT': '3306', # mysql服务端口
}
# 加载的自带或者自己定制的app包路径列表
INSTALLED_APPS = [
'django.contrib.admin', # 管理站点
'django.contrib.auth', # 认证系统
'django.contrib.contenttypes', # 用于内容类型的框架
'django.contrib.sessions', # 会话框架,session数据可以在数据库中的django_session表中查看
'django.contrib.messages', # 消息框架
'django.contrib.staticfiles', # 管理静态文件的框架
'demo', # 自己的app
]
# 语言版本切换
LANGUAGE_CODE = 'zh-hans'
# 时区切换
TIME_ZONE = 'Asia/Shanghai'
# 设置国际化
USE_I18N = True
USE_L10N = True
USE_TZ = True
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
# 静态文件地址
STATIC_URL = '/static/'
# 指定静态文件的目录所在地
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static').replace('\\', '/'),
os.path.join(BASE_DIR, 'templates').replace('\\', '/'),
)
三、urls路由配置
# 前端更具路由访问到后台views
urlpatterns = [
path('admin/', admin.site.urls),
path('regist/', views.regist),
path('userRegist/', views.userRegist),
path('', views.login),
]
四、数据库(models)配置
# 例子:用户表
class User(models.Model):
user_name = models.CharField(max_length=16)
password = models.CharField(max_length=16)
gender = models.CharField(max_length=20)
create_time = models.DateField(auto_now_add=True)
update_time = models.DateField(auto_now=True)
enable = models.BooleanField(default=True)
五、数据库迁移
# 1、生成迁移文件
python manage.py makemigrations
# 2、生成数据库表
python manage.py migrate
2.搭建框架结构目录
1、config,存放配置文件如conf_db数据库配置
2、interface,接口规范
3、logs,日志文件,info.log,erro.log
4、reports,存放报告
5、testcase,存放测试用例
6、tools,工具类,api,随机函数二次封装,获取excel内容等…
3.安装Pytest
一.常用装饰器
1.pytest.mark.parametrize('参数名',list)可以实现测试用例参数化
-第一个参数是字符串,多个参数中间用逗号隔开
-第二个参数是list,多组数据用元祖类型;传三个或更多参数也是这样传。list的每个元素都是一个元组,元组里的每个元素和按参数顺序一一对应
2.pytest.mark.skip(设置跳过测试用例的装饰器)
3.pytest.mark.xfail(标记测试用例”预期失败“的装饰器)
4.pytest.mark.自定义名称
-自定义marker:创建pytest的配置文件pytest.ini,然后在里面定义标记
5.pytest.fixture()
-此方法可以完成测试之前的初始化
-可以返回数据给测试函数
参数scope="module"
function:每个test都运行,默认是function的scope
class:每个class的所有test只运行一次
module:每个module的所有test只运行一次
session:每个session只运行一次
4.安装Allure插件
一.安装pytest-allure依赖库
二.allure常用装饰器,定制化报告
@allure.title("用例标题0")
@allure.description("这里是对test_0用例的一些详细说明")
@allure.feature('这里是一级标签') 分组第一层
@allure.story(‘二级标签’) 分组第二层
@allure.severity(‘allure.severity_level.CRITICAL’) 标记严重级别
BLOCKER = 'blocker' 中断缺陷(客服端程序无响应,无法执行下一步骤)
CRITICAL = 'critical' 临界缺陷(功能点缺失)
NORMAL = 'normal' 普通缺陷(数据计算错误)
MINOR = 'minor' 次要缺陷(界面错误与ui需求不符)
TRIVIAL = 'trivial' 轻微缺陷(必须项无提示,或者提示不规范)
@allure.step(‘这里是操作步骤的描述’)
@allure.attach(body, name, attachment_type, extension)
body - 要写入文件的原始内容。
name - 包含文件名的字符串
attachment_type- 其中一个allure.attachment_type值
extension - 提供的将用作创建文件的扩展名
@allure.link('链接') @allure.issue('链接') @allure.testcase('链接')
三.报告加入日志信息
import logging
logger = logging.getLogger()
# 加入日志信息
logger.setLevel(level=logging.INFO)
# 正常日志信息
def info(msg):
logger.info(msg)
# 调试日志信息
def debug(msg):
logger.debug(msg)
# 警告日志信息
def warning(msg):
logger.warning(msg)
# 错误日志信息
def error(msg):
logger.error(msg)
# 重要的信息
def critical(msg):
logger.critical(msg)
4.加入发送邮件功能
python发送邮件需要用到python自带的两个模块,smtplib和email
> 创建SMTP的操作对象并连接smtp目标服务器,可以是163、QQ等
> 根据自己的账号登录目标服务器(自己的邮箱地址和邮箱授权码)
> 调用对象中的方法,发送邮件到目标地址
代码块
import smtplib
from email.mime.text import MIMEText
from email.header import Header
def test_send_text():
# 第三方 SMTP 服务
mail_host = "smtp.126.com" # 设置服务器
mail_user = "-----@126.com" # 用户名
mail_pass = "授权码" # 口令,授权码
sender = '-----@126.com'
receivers = ['-----@qq.com', ] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱,可设置多个
message = MIMEText('接口自动化发送邮件测试...', 'plain', 'utf-8')
message['From'] = sender
message['To'] = ';'.join(receivers)
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')
try:
smtp = smtplib.SMTP()
smtp.connect(mail_host, 25) # 25 为SMTP端口号
smtp.login(mail_user, mail_pass) # 登录验证
smtp.sendmail(sender, receivers, message.as_string())
print("邮件发送成功")
except smtplib.SMTPException:
print("Error: 无法发送邮件")