当前位置: 首页 > news >正文

青岛专业网站设计的公司成免费的crm

青岛专业网站设计的公司,成免费的crm,外贸公司名称,开网站建设公司好目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 参数化&#xff1…

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

参数化?
通俗点理解就是,定义一个测试类或测试函数,可以传入不同测试用例对应的参数,从而执行多个测试用例。

例如:
对登录接口进行测试,假设有3条用例,正确账号正确密码登录、正确账号错误密码登录、错误账号正确密码登录,那么我们只需要定义一个登陆测试函数test_login(),然后使用这3条用例对应的参数去调用test_login()即可。

在unittest中可以使用ddt进行参数化,而pytest中也提供非常方便的参数化方式,即使用装饰器@pytest.mark.parametrize()。

一般写为pytest.mark.parametrize(“argnames”, argvalues)。
其中:
argnames为参数名称,可以是单个或多个,多个写法为"argname1, argname2, …";
argvalues为参数值,类型必须为list(单个参数时可以为元组,多个参数时必须为list,所以最好统一);

例如有下接口:
请求的登陆接口信息:

接口url:http://127.0.0.1:5000/login
请求方式:post
请求参数:
响应信息:

1、单个参数

只需要传入一个参数时,示例如下:

# 待测试函数
def sum(a):return a+1# 单个参数
data = [1, 2, 3, 4]
@pytest.mark.parametrize("item", data)
def test_add(item):actual = sum(item)print("\n{}".format(actual))# assert actual == 3if __name__ == '__main__':pytest.main()

注意:
@pytest.mark.parametrize()中的第一个参数,必须以字符串的形式来标识测试函数的入参,如上述示例中,定义的测试函数test_login()中传入的参数名为item,那么@pytest.mark.parametrize()的第一个参数则为"item"。

运行结果如下:

rootdir: E:\blog\python接口自动化\apiAutoTest, configfile: pytest.ini
plugins: html-2.1.1, metadata-1.10.0, ordering-0.6, rerunfailures-9.1.1
collecting ... collected 4 itemstest_case_2.py::test_add[1] PASSED                                       [ 25%]
2test_case_2.py::test_add[2] PASSED                                       [ 50%]
3test_case_2.py::test_add[3] PASSED                                       [ 75%]
4test_case_2.py::test_add[4] PASSED                                       [100%]
5============================== 4 passed in 0.02s ==============================

从结果可以看到,测试函数分别传入了data中的参数,总共执行了5次。

2、多个参数

测试用例需传入多个参数时,@pytest.mark.parametrize() 的第一个参数同样是字符串, 对应用例的多个参数用逗号分隔。

示例:

import pytest
import requests
import json# 列表嵌套元组
data = [("lilei", "123456"), ("hanmeimei", "888888")]
# 列表嵌套列表
# data = [["lilei", "123456"], ["hanmeimei", "888888"]]@pytest.mark.parametrize("username, password", data)
def test_login(username, password):headers = {"Content-Type": "application/json;charset=utf8"}url = "http://127.0.0.1:5000/login"_data = {"username": username,"password": password}res = requests.post(url=url, headers=headers, json=_data).textres = json.loads(res)assert res['code'] == 1000if __name__ == '__main__':pytest.main()

需要注意:
代码中data的格式,可以是列表嵌套列表,也可以是列表嵌套元组,列表中的每个列表或元组代表一组独立的请求参数。
"username, password"不能写成 “username”, “password”。

运行结果如下:

A1

从结果中我们还可以看到每次执行传入的参数,如下划线所示部分。

这里所举示例是2个参数,传入3个或更多参数时,写法也同样如此,一定要注意它们之间一一对应的关系,如下图:

A2

3、对测试类参数化

上面所举示例都是对测试函数进行参数化,那么对测试类怎么进行参数化呢?

其实,对测试类的参数化,就是对测试类中的测试方法进行参数化。

@pytest.mark.parametrize()中标识的参数个数,必须与类中的测试方法的参数一致。示例如下:

# 将登陆接口请求单独进行了封装,仅仅只是为了方便下面的示例
def login(username, password):headers = {"Content-Type": "application/json;charset=utf8"}url = "http://127.0.0.1:5000/login"_data = {"username": username,"password": password}res = requests.post(url=url, headers=headers, json=_data).textres = json.loads(res)return res# 测试类参数化
data = [("lilei", "123456"), ("hanmeimei", "888888")
]
@pytest.mark.parametrize("username, password", data)
class TestLogin:def test_login_01(self, username, password):res = login(username, password)assert res['code'] == 1000def test_login_02(self, username, password):res = login(username, password)assert res['msg'] == "登录成功!"if __name__ == '__main__':pytest.main(["-s"])

运行结果如下:

A3

从结果中可以看出来,总共执行了4次,测试类中的每个测试方法都执行了2次,即每个测试方法都将data中的每一组参数都执行了一次。

注意:
这里还是要强调参数对应的关系,即@pytest.mark.parametrize()中的第一个参数,需要与测试类下面的测试方法的参数一一对应。

4、参数组合

在编写测试用例的过程中,有时候需要将参数组合进行接口请求,如示例的登录接口中username有 lilei、hanmeimei,password有 123456、888888,进行组合的话有下列四种情况:

{"username": "lilei", "password": "123456"}
{"username": "lilei", "password": "888888"}
{"username": "hanmeimei", "password": "123456"}
{"username": "hanmeimei", "password": "888888"}

在@pytest.mark.parametrize()也提供了这样的参数组合功能,编写格式示例如下:

import pytest
import requests
import jsonusername = ["lilei", "hanmeimei"]
password = ["123456", "888888"]@pytest.mark.parametrize("password", password)
@pytest.mark.parametrize("username", username)
def test_login(username, password):headers = {"Content-Type": "application/json;charset=utf8"}url = "http://127.0.0.1:5000/login"_data = {"username": username,"password": password}res = requests.post(url=url, headers=headers, json=_data).textres = json.loads(res)assert res['code'] == 1000if __name__ == '__main__':pytest.main()

运行结果如下:

rootdir: E:\blog\python接口自动化\apiAutoTest, configfile: pytest.ini
plugins: html-2.1.1, metadata-1.10.0, ordering-0.6, rerunfailures-9.1.1
collecting ... collected 4 itemstest_case_5.py::test_login[lilei-123456] PASSED                          [ 25%]
test_case_5.py::test_login[lilei-888888] FAILED                          [ 50%]
test_case_5.py::test_login[hanmeimei-123456] FAILED                      [ 75%]
test_case_5.py::test_login[hanmeimei-888888] PASSED                      [100%]
=========================== short test summary info ===========================
FAILED test_case_5.py::test_login[lilei-888888] - assert 1001 == 1000
FAILED test_case_5.py::test_login[hanmeimei-123456] - assert 1001 == 1000
========================= 2 failed, 2 passed in 0.18s =========================

从结果可以看出来,2个username、2个password 有4中组合方式,总执行了4次。如果是3个username、2个password,那么就有6中参数组合方式,依此类推。

注意:
以上这些示例中的测试用例仅仅只是用于举例,实际项目中的登录接口测试脚本与测试数据会不一样。

5、增加测试结果可读性

从示例的运行结果中我们可以看到,为了区分参数化的运行结果,在结果中都会显示由参数组合而成的执行用例名称,很方便就能看出来执行了哪些参数组合的用例。

示例:

A5

但这只是简单的展示,如果参数多且复杂的话,仅仅这样展示是不够清晰的,需要添加一些说明才能一目了然。

因此,在@pytest.mark.parametrize()中有两种方式来自定义上图中划线部分的显示结果,即使用@pytest.mark.parametrize()提供的参数 ids 自定义,或者使用pytest.param()中的参数id自定义。

ids(推荐)
ids使用方法示例如下:

import pytest
import requests
import jsondata = [("lilei", "123456"), ("hanmeimei", "888888")]
ids = ["username:{}-password:{}".format(username, password) for username, password in data]
@pytest.mark.parametrize("username, password", data, ids=ids)
def test_login(username, password):headers = {"Content-Type": "application/json;charset=utf8"}url = "http://127.0.0.1:5000/login"_data = {"username": username,"password": password}res = requests.post(url=url, headers=headers, json=_data).textres = json.loads(res)assert res['code'] == 1000if __name__ == '__main__':pytest.main()

从编写方式可以看出来,ids就是一个list,且它的长度与参数组合的分组数量一致。

运行结果如下:

A6

比较上面个执行结果,我们能看出ids自定义执行结果与默认执行结果展示的区别。使用过程中,需要根据实际情况来自定义。

id
使用方式示例如下:

import pytest
import requests
import jsondata = [pytest.param("lilei", "123456", id="correct username and correct password"),pytest.param("lilei", "111111", id="correct user name and wrong password")
]@pytest.mark.parametrize("username, password", data)
def test_login(username, password):headers = {"Content-Type": "application/json;charset=utf8"}url = "http://127.0.0.1:5000/login"_data = {"username": username,"password": password}res = requests.post(url=url, headers=headers, json=_data).textres = json.loads(res)assert res['code'] == 1000if __name__ == '__main__':pytest.main()

运行结果如下:

A7

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

奋斗是一段漫长的旅程,痛苦与磨难只是通往成功的试炼。不惧困难,坚守信念,用汗水浇灌梦想的花朵。相信自己,勇往直前,你将创造属于自己的辉煌,留下无悔的足迹!

执着的火焰燃烧内心,不屈的勇气驱散黑暗。放下畏惧,迎接挑战,奋斗的脚步不停歇。每一次努力铸就坚韧,每一次拼搏开启新篇章。勇往直前,追逐梦想。

人生的舞台,唯有奋斗才能谱写出绚丽的乐章。不要畏惧困难,要勇敢地迎接挑战。坚持努力,永不放弃,相信自己的力量,你将创造出意想不到的精彩人生!


文章转载自:
http://dinncokifi.zfyr.cn
http://dinncocytogenetically.zfyr.cn
http://dinncoseafloor.zfyr.cn
http://dinncopappoose.zfyr.cn
http://dinncogaudily.zfyr.cn
http://dinncoeyer.zfyr.cn
http://dinncobounce.zfyr.cn
http://dinncocaaba.zfyr.cn
http://dinncolandlouper.zfyr.cn
http://dinncocreepily.zfyr.cn
http://dinncoferacity.zfyr.cn
http://dinncotarriance.zfyr.cn
http://dinncofeeblish.zfyr.cn
http://dinncosarre.zfyr.cn
http://dinncounsportsmanlike.zfyr.cn
http://dinncocausalgic.zfyr.cn
http://dinncochokebore.zfyr.cn
http://dinncohydrometallurgical.zfyr.cn
http://dinncoinornate.zfyr.cn
http://dinncobathometer.zfyr.cn
http://dinncoindianization.zfyr.cn
http://dinncosnowblink.zfyr.cn
http://dinncocourtship.zfyr.cn
http://dinncoshimizu.zfyr.cn
http://dinncosulphatase.zfyr.cn
http://dinncoungodliness.zfyr.cn
http://dinncomedline.zfyr.cn
http://dinncohaustorium.zfyr.cn
http://dinncodishclout.zfyr.cn
http://dinncoplayfield.zfyr.cn
http://dinncoflytable.zfyr.cn
http://dinncomaduro.zfyr.cn
http://dinncoalexia.zfyr.cn
http://dinncochiropody.zfyr.cn
http://dinncoverbal.zfyr.cn
http://dinncounstripped.zfyr.cn
http://dinncofiliation.zfyr.cn
http://dinncoteratogen.zfyr.cn
http://dinncogrunge.zfyr.cn
http://dinncodioestrous.zfyr.cn
http://dinncoreserpinized.zfyr.cn
http://dinncounusually.zfyr.cn
http://dinncoassumption.zfyr.cn
http://dinncoossian.zfyr.cn
http://dinncoadiathermancy.zfyr.cn
http://dinncoanteflexion.zfyr.cn
http://dinncopsychoenergetic.zfyr.cn
http://dinncoocs.zfyr.cn
http://dinncoanisole.zfyr.cn
http://dinncodisposedly.zfyr.cn
http://dinncowhimsy.zfyr.cn
http://dinncohandloader.zfyr.cn
http://dinncosmuggling.zfyr.cn
http://dinncohamamatsu.zfyr.cn
http://dinnconitrophenol.zfyr.cn
http://dinncototalisator.zfyr.cn
http://dinncoluna.zfyr.cn
http://dinncolabialism.zfyr.cn
http://dinncotheremin.zfyr.cn
http://dinncoeuphemise.zfyr.cn
http://dinncologbook.zfyr.cn
http://dinncopreceptress.zfyr.cn
http://dinncoseizable.zfyr.cn
http://dinncohippophagist.zfyr.cn
http://dinncoparaleipomena.zfyr.cn
http://dinncoquadrumana.zfyr.cn
http://dinncofreckly.zfyr.cn
http://dinncocull.zfyr.cn
http://dinncoandvari.zfyr.cn
http://dinncogenevieve.zfyr.cn
http://dinncoanagrammatize.zfyr.cn
http://dinncoballetic.zfyr.cn
http://dinncodetroit.zfyr.cn
http://dinncochoreographic.zfyr.cn
http://dinncofulmination.zfyr.cn
http://dinncoquiverful.zfyr.cn
http://dinncocholestasis.zfyr.cn
http://dinncomanila.zfyr.cn
http://dinncohistophysiological.zfyr.cn
http://dinncodeuton.zfyr.cn
http://dinncohomebuilding.zfyr.cn
http://dinncopenholder.zfyr.cn
http://dinncoultimatum.zfyr.cn
http://dinncoexclusion.zfyr.cn
http://dinncoeland.zfyr.cn
http://dinncotangoist.zfyr.cn
http://dinncoworrying.zfyr.cn
http://dinncomodicum.zfyr.cn
http://dinncohesperia.zfyr.cn
http://dinncomycologist.zfyr.cn
http://dinncobottleneck.zfyr.cn
http://dinncocardiogram.zfyr.cn
http://dinncomicroholography.zfyr.cn
http://dinncosabayon.zfyr.cn
http://dinncoperimorph.zfyr.cn
http://dinncodespumation.zfyr.cn
http://dinncopolymerization.zfyr.cn
http://dinncosoursop.zfyr.cn
http://dinncopoltfoot.zfyr.cn
http://dinncoinexpectancy.zfyr.cn
http://www.dinnco.com/news/114725.html

相关文章:

  • 网站制作职责网站建设方案模板
  • 手机网站与app的区别深圳搜索引擎优化推广便宜
  • 博罗营销网站制作营销策划公司主要做些什么
  • 2023近期出现的病毒叫什么西安seo网络推广
  • 无锡做食品网站的公司简介广告联盟app下载
  • 发新闻稿做新闻源对网站有啥帮助免费b站软件下载
  • 网站备案号规则百度搜索引擎营销
  • 建设网站需要做的工作内容创建自己的网站怎么弄
  • 独立的网站页面怎么做广告联盟app下载官网
  • 哪家做企业网站企业网站建设需要多少钱
  • 公司给别人做的网站违法的吗软考培训机构哪家好一点
  • 地方网站还有得做吗永久8x的最新域名
  • 潍坊 网站建设中国旺旺(00151) 股吧
  • 龙岩做网站网站推广互联网推广
  • 网站建设中html 下载郑州seo优化顾问阿亮
  • 某商贸网站建设方案微信营销方法
  • 政府网站建设实施方案评标办法b站24小时自助下单平台网站
  • 做网络推广选择网站东莞今日头条新闻
  • 河南网站开发优化手机百度如何发布广告
  • 做网站一定要用cmsseo线下培训班
  • 北京市专业网站制作企业优书网首页
  • 长沙最新疫情通报快速优化网站排名的方法
  • 网站的字体做多大合肥疫情最新消息
  • 义乌小商品批发网seo优化排名公司
  • 富阳网站建设怎样网站建设的好公司
  • wordpress 下列主题不完整_没有主题样式表和模板.网络优化需要哪些知识
  • 芜湖网站建设百度推广有哪些推广方式
  • 做自动采集电影网站有什么处罚seo结算系统
  • 网站营销是什么意思怎么交换友情链接
  • 免费的成品网站百度关键词排名代做