harbar仓库的接口测试
一、接口测试命令
api接口文档:https://github.com/goharbor/harbor/blob/release-1.7.0/docs/swagger.yaml
登录接口测试
curl --insecure -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://192.168.44.10/api/users/current"
1)查看所属项目的信息。根据项目 id 查找
备注:{project_id} 为项目 id
curl -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://192.168.44.10/api/projects/{project_id}" curl -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://192.168.44.10/api/projects/1"
项目id的查看方式:https://192.168.44.10/harbor/projects/1/repositories
实际操作中
[root@harbar-master ~]# curl -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://192.168.44.10/api/projects/1"
curl: () Unable to communicate securely with peer: requested domain name does not match the server's certificate.
[root@harbar-master ~]# curl --insecure -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://192.168.44.10/api/projects/1"
{
"project_id": ,
"owner_id": ,
"name": "library",
"creation_time": "2019-11-24T14:58:43.684818Z",
"update_time": "2019-11-24T14:58:43.684818Z",
"deleted": false,
"owner_name": "",
"togglable": true,
"current_user_role_id": ,
"repo_count": ,
"chart_count": ,
"metadata": {
"public": "true"
}
}[root@harbar-master ~]#
--insecure 忽略不安全的证书
2)查找出所有的项目
[root@harbar-master ~]# curl --insecure -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://192.168.44.10/api/projects"
[
{
"project_id": ,
"owner_id": ,
"name": "library",
"creation_time": "2019-11-24T14:58:43.684818Z",
"update_time": "2019-11-24T14:58:43.684818Z",
"deleted": false,
"owner_name": "",
"togglable": true,
"current_user_role_id": ,
"repo_count": ,
"chart_count": ,
"metadata": {
"public": "true"
}
},
{
"project_id": ,
"owner_id": ,
"name": "codo",
"creation_time": "2019-11-28T16:30:19Z",
"update_time": "2019-11-28T16:30:19Z",
"deleted": false,
"owner_name": "",
"togglable": true,
"current_user_role_id": ,
"repo_count": ,
"chart_count": ,
"metadata": {
"public": "false"
}
}
][root@harbar-master ~]#
3)搜索 某个应用的 信息
[root@harbar-master ~]# curl --insecure -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://192.168.44.10/api/search?q=myapp"
{
"project": [],
"repository": [
{
"project_id": ,
"project_name": "library",
"project_public": true,
"pull_count": ,
"repository_name": "library/myapp",
"tags_count":
}
],
"Chart": null
}[root@harbar-master ~]#
4)查询应用某个项目下的应用
curl --insecure -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://192.168.44.10/api/repositories?project_id={project_id}"
实际操作过程
[root@harbar-master ~]# curl --insecure -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://192.168.44.10/api/repositories?project_id=1"
[
{
"id": ,
"name": "library/myapp",
"project_id": ,
"description": "",
"pull_count": ,
"star_count": ,
"tags_count": ,
"labels": [],
"creation_time": "2019-11-24T15:16:09.311411Z",
"update_time": "2019-11-24T15:26:07.408234Z"
}
][root@harbar-master ~]#
或者
[root@harbar-master ~]# curl --insecure -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://192.168.44.10/api/repositories?project_id=1&q=library%2Fmyapp"[
{
"id": ,
"name": "library/myapp",
"project_id": ,
"description": "test",
"pull_count": ,
"star_count": ,
"tags_count": ,
"labels": [],
"creation_time": "2019-11-24T15:16:09.311411Z",
"update_time": "2019-11-28T17:36:41.753116Z"
}
][root@harbar-master ~]#
5)根据项目和应用搜索应用的tag名
curl --insecure -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://192.168.44.10/api/repositories/{repo_name}/tags"
实际操作
[root@harbar-master ~]# curl --insecure -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://192.168.44.10/api/repositories/library%2Fmyapp/tags"
[
{
"digest": "sha256:9eeca44ba2d410e54fccc54cbe9c021802aa8b9836a0bcf3d3229354e4c8870e",
"name": "v1",
"size": ,
"architecture": "amd64",
"os": "linux",
"docker_version": "17.03.2-ce",
"author": "MageEdu \u003cmage@magedu.com\u003e",
"created": "2018-03-02T03:39:41.482586301Z",
"config": {
"labels": {
"annotation.io.kubernetes.container.hash": "5ddb7a8b",
"annotation.io.kubernetes.container.ports": "[{\"name\":\"http\",\"containerPort\":80,\"protocol\":\"TCP\"}]",
"annotation.io.kubernetes.container.restartCount": "",
"annotation.io.kubernetes.container.terminationMessagePath": "/dev/termination-log",
"annotation.io.kubernetes.container.terminationMessagePolicy": "File",
"annotation.io.kubernetes.pod.terminationGracePeriod": "",
"io.kubernetes.container.logpath": "/var/log/pods/f7b6ba81-1dc0-11e8-9267-000c29ab0f5b/myapp_0.log",
"io.kubernetes.container.name": "myapp",
"io.kubernetes.docker.type": "container",
"io.kubernetes.pod.name": "deploy-myapp-79859f456c-29rqw",
"io.kubernetes.pod.namespace": "default",
"io.kubernetes.pod.uid": "f7b6ba81-1dc0-11e8-9267-000c29ab0f5b",
"io.kubernetes.sandbox.id": "8e322f9ddffb50284081710a6aa77741563272de431416193450c8a65481033d",
"maintainer": "NGINX Docker Maintainers \u003cdocker-maint@nginx.com\u003e"
}
},
"signature": null,
"labels": []
}
][root@harbar-master ~]#
二、脚本清理harbar镜像
#!/bin/bash
ENV=application
URL=https://192.168.1.101
USER=username
PASSWORD=password project_id=`curl -s -u "$USER:$PASSWORD" -X GET -H "Content-Type: application/json" "$URL/api/projects?name=$ENV"|jq .[].project_id`
repo=`curl -s -u "$USER:$PASSWORD" -X GET -H "Content-Type: application/json" "$URL/api/repositories?project_id=$project_id"|jq -r .[].name|sed 's/\"//g'|awk -F '/' '{print $2}'`
echo "项目ID为$project_id" for NAME in $repo
do
tags=`curl -s -u "$USER:$PASSWORD" -X GET -H "Content-Type: application/json" "$URL/api/repositories?project_id=$project_id&q=$ENV/$NAME"|jq .[].tags_count`
echo "准备清理$NAME仓库"
echo "$NAME仓库tag总数:$tags"
if [ -lt $tags ]
then
count_image=`expr $tags - `
echo "$NAME仓库需清理$count_image个镜像"
images_tag=`curl -s -u "$USER:$PASSWORD" -X GET -H "Content-Type: application/json" "$URL/api/repositories/$ENV/$NAME/tags"| jq .[].name |sed 's/\"//g'|sort -n | head -n $count_image`
for i in $images_tag
do
echo "正在删除$NAME tag为$i的镜像"
curl -s -u "$USER:$PASSWORD" -X DELETE -H "Content-Type: application/json" "$URL/api/repositories/$ENV/$NAME/tags/$i"
done
if [ $? -eq ]
then
echo "本次共删除$count_image个镜像"
echo "清理$NAME仓库完成!!!!!"
fi
fi
done
三、python测试接口
import requests class HarborClient(object): def __init__(self, url, username, password):
self.username = username
self.password = password
self.url = url
self.session = requests.Session()
self.api = self.url + '/api'
self.login() def login(self):
login = '/login'
login_url = self.url + login
self.session.post(login_url, params={"principal": self.username, "password": self.password}) class HarborApi(HarborClient):
def projects(self):
''' 获取项目的详细信息,如下
[{
'project_id': ,
'owner_id': ,
'name': 'enos',
......
'current_user_role_id': ,
'repo_count': ,
'chart_count': ,
}]
:return:
'''
projects_url = self.api + "/projects"
projects_info = self.session.get(projects_url).json()
return projects_info def projects_id(self):
projects_info = self.projects()
project_id_list = []
for projects in projects_info:
project_id_list.append(projects['project_id'])
print(project_id_list)
return project_id_list def deployments(self):
''' 获取enos下面的所有项目信息
[{
'id': ,
'name': 'enos/myapp',
'project_id': ,
'description': '',
'pull_count': ,
'star_count': ,
'tags_count': ,
'labels': [],
'creation_time': '2020-05-04T11:50:25.645659Z',
'update_time': '2020-05-04T11:26:48.74488Z'
}]
:return:
'''
pro_id =
repos_url = self.api + "/repositories"
repos_res = self.session.get(repos_url, params={"project_id": pro_id})
deployments_info = repos_res.json()
return deployments_info def tags(self):
deployments_info = self.deployments()
deployment_names = []
for deployment in deployments_info:
deployment_names.append(deployment['name'])
# 选择第一个作为测试
tags_url = self.api + "/repositories" + '/'+ deployment_names[] + "/tags"
tags = self.session.get(tags_url).json()
tags_sort = sorted(tags, key=lambda tags: tags["created"]) # 将 tag 按照创建时间进行排列
del_tag = tags_sort[:][]
return del_tag,tags_url def delele_tag(self):
'''
:return:
'''
# curl -u "admin:Harbor2018" -X DELETE "https://harbor-test1.eniot.io/api/repositories/enos/myapp/tags/v1"
del_tag,tags_url = self.tags()
del_tag_url = tags_url + "/" + del_tag['name']
print(self.session)
params = {
'url': del_tag_url,
'timeout':
}
del_res = self.session.delete(**params)
print(del_res.json()) if __name__ == "__main__":
harbor_url = "https://harbor-test1.eniot.io"
username = "admin"
password = "password"
res = HarborApi(harbor_url,username, password)
res.delele_tag()
1)过滤 tag比较多的项目且时间比较久的项目
import requests class HarborClient(object): def __init__(self, url, username, password):
self.username = username
self.password = password
self.url = url
self.session = requests.Session()
self.api = self.url + '/api'
self.login() def login(self):
login = '/login'
login_url = self.url + login
self.session.post(login_url, params={"principal": self.username, "password": self.password}) class HarborApi(HarborClient):
def projects(self):
projects_url = self.api + "/projects"
projects_info = self.session.get(projects_url).json()
return projects_info def projects_id(self):
projects_info = self.projects()
project_id_list = []
for projects in projects_info:
project_id_list.append(projects['project_id'])
return project_id_list def deployments(self):
projects_id_list = self.projects_id()
max_app = []
for pro_id in projects_id_list:
repos_url = self.api + "/repositories"
# https://harbor-test1.eniot.io/api/repositories
# https://harbor-test1.eniot.io/api/repositories/enos/myapp/tags/v1
repos_res = self.session.get(repos_url, params={"project_id": pro_id})
deployments_info = repos_res.json()
app_list = []
for app in deployments_info:
if app['tags_count'] > :
print(app)
name = app['name']
tags_url = repos_url + "/" + name + "/tags/"
tags = self.session.get(tags_url).json()
tags_sort = sorted(tags, key=lambda tags: tags["created"])
last_time = tags_sort[]["created"]
standards_time = '2019-12-30T17:00:00.000Z'
if last_time < standards_time:
print(name)
app_list.append(name) if __name__ == "__main__":
harbor_url = "https://harbor-test1.eniot.io"
username = "admin"
password = "password"
res = HarborApi(harbor_url,username, password)
res.deployments()
harbar仓库的接口测试的更多相关文章
- jenkins+ANT+jmeter 接口测试环境搭建
目的 jmeter很早就接触了,最近又在接触项目的时候整了一下.写这篇博客主要有两个目的 1,为了给自己搭建jmeter做一个总结. 2,在部署过程中遇到过一些坑,在这分享出来,也希望能给需要的人一个 ...
- flask + Python3 实现的的API自动化测试平台---- IAPTest接口测试平台(总结感悟篇)
前言: 在前进中去发现自己的不足,在学习中去丰富自己的能力,在放弃时想想自己最初的目的,在困难面前想想怎么踏过去.在不断成长中去磨炼自己. 正文: 时间轴 flask + Python3 实现的的AP ...
- Jenkins +git +python 进行持续集成进行接口测试(接口测试jenkins持续集成篇)
使用jenkins+git+python脚本进行持续集成的接口测试,在jenkins平台,利用插件等,把管理代码的git仓库的代码更新下来进行持续接口测试,python进行开发测试脚本,git进行远程 ...
- 接口测试maven管理
接口测试框架选择 界面化工具,针对不会编码的测试人员: 1.Jmeter性能测试工具,不具备完备的接口测试框架功能 2.Robotframerwork 3.PostMan 推荐框架: ResrAssu ...
- Python接口测试实战5(上) - Git及Jenkins持续集成
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- Docker容器(六)——创建docker私有化仓库
docker私有化仓库是为了节约带宽(外网速度慢或者干脆不能连外网),以及自己定制系统. (1).环境 youxi1 192.168.5.101 docker私有化仓库 youxi2 192.168. ...
- api-hook,更轻量的接口测试工具
前言 在网站的开发过程中,接口联调和测试是至关重要的一环,其直接影响产品的核心价值,而目前也有许多技术方案和工具加持,让我们的开发测试工作更加便捷.接口作为数据传输的重要载体,数据格式和内容具有多样性 ...
- 接口测试框架Requests
目录 Requests Requests安装 Requests常见接口请求方法构造 请求目标构造 header构造 cookie 构造请求体 Get Query请求 Form请求参数 JSON请求体构 ...
- 【社工】NodeJS 应用仓库钓鱼
前言 城堡总是从内部攻破的.再强大的系统,也得通过人来控制.如果将入侵直接从人这个环节发起,那么再坚固的防线,也都成为摆设. 下面分享一个例子,利用应用仓库,渗透到开发人员的系统中. 应用仓库 应用仓 ...
随机推荐
- MongoDB的环境搭建及启动
MongoDB环境搭建及配置 一.环境搭建 Mac:brew install mongodb 常见问题: Error: Permission denied @ unlink_internal 解决方案 ...
- POJ 3889 Fractal Streets(逼近模拟)
$ POJ~3889~Fractal~Streets $(模拟) $ solution: $ 这是一道淳朴的模拟题,最近发现这种题目总是可以用逼近法,就再来练练手吧. 首先对于每个编号我们可以用逼近法 ...
- JavaWeb(九):上传和下载
表单 进行文件上传时, 表单需要做的准备: 1). 请求方式为 POST: <form action="uploadServlet" method="post&qu ...
- 【leetcode】1033. Moving Stones Until Consecutive
题目如下: Three stones are on a number line at positions a, b, and c. Each turn, you pick up a stone at ...
- linux下将一系列.o文件打包成.a文件
参考链接:https://www.cnblogs.com/joshtao/p/7380627.html
- docker运行spring boot 包镜像出现no main manifest attribute问题
问题: 在进行docker部署的时候,开始对项目进行打包,在启动该镜像时 [root@topcheer docker]# docker run -it 00494e3d4550no main mani ...
- 解决kubernetes拉取不了镜像仓库的问题
将镜像仓库地址k8s.gcr.io改成registry.aliyuncs.com/google_containers
- atoi()和stoi()函数
C++的字符处理函数,把数字字符串转换成int输出 头文件都是#include<cstring> atoi()的参数是 const char* ,因此对于一个字符串str我们必须调用 c_ ...
- Linux系统中imp导入dmp文件
[oracle@ocm1 ~]$ lltotal 32-rw-r--r-- 1 oracle oinstall 24576 Mar 27 15:26 COUNTRIES.dmpdrwxr-xr-x 2 ...
- DAO层单元测试编码和问题排查
DAO层单元测试编码和问题排查 SecKillDaoTest .java(注意接口参数使用注解@Parm(“parameter”)) package org.secKill.dao; import o ...