测试
SingleTransactionCase 由这个类生成的测试用例,会将所有测试用例运行到一个事务中,因此测试用例中做的修改会在另一个测试用例中使用到。 事务公共第一个测试方法开启,在完成最后一个测试用例时结束
SavepointCase 在回滚保存点之前运行, 不是将所有测试用例放在一个单独的事务中类运行。它用于创建大型测试用例,让它们通过仅生成一次数据来实现更快的速度。此处,我们使用 setUpClass()方法来生成初始测试数据
Odoo中的远程过程调用(RPC)
XML-RPC
from xmlrpc import client
server_url='http://127.0.0.1:8888'
db_name='12DB_ENTER'
username='1'
password='1'
common=client.ServerProxy(f'{server_url}/xmlrpc/2/common')
user_id=common.authenticate(db_name,username,password,{})
version_info=common.version()
if user_id:
print(user_id)
print(version_info)
search_domain = ['|', ['name', 'ilike', 'odoo'], ['name', 'ilike', 'sql']]
books_ids = models.execute_kw(db_name, user_id, password,
'library.book', 'search',
[search_domain],
{'limit': 5})
books_data= models.execute_kw(db_name, user_id, password,
'library.book', 'read',
[books_ids, ['name', 'date_release']])
search_domain = ['|', ['name', 'ilike', 'odoo'], ['name', 'ilike', 'python']]
books_ids = models.execute_kw(db_name, user_id, password,
'library.book', 'search_read',
[search_domain, ['name', 'date_release']],
{'limit': 5})
print('Books data:', books_ids)
create_data = [
{'name': 'Book 1', 'release_date': '2019-01-26'},
{'name': 'Book 3', 'release_date': '2019-02-12'},
{'name': 'Book 3', 'release_date': '2019-05-08'},
{'name': 'Book 7', 'release_date': '2019-05-14'}
]
books_ids = models.execute_kw(db_name, user_id, password,
'library.book', 'create',
[create_data])
print("Books created:", books_ids)
book_to_write = books_ids[1]
write_data = {'name': 'Books 2'}
written = models.execute_kw(db_name, user_id, password,
'library.book', 'write',
[book_to_write, write_data])
books_to_delete = books_ids[2:]
deleted = models.execute_kw(db_name, user_id, password,
'library.book', 'unlink',
[books_to_delete])
models.execute_kw(db_name, user_id, password,
'library.book', 'make_available',
[[book_id]])
1.无法通过RPC调用私有方法,只能调用公有方法
2. 如果方法产生了异常,事务中执行的操作会自动回滚到初始状态。 仅适用于单个事务
3. 多次调用RPC时,产生异常时。调用成功的RPC事务不会回滚。 推荐使用单个RPC调用执行
JSON-RPC
import json
import random
import requests
server_url = 'http://localhost:8069'
db_name = 'test-12'
username = 'admin'
password = 'admin'
json_endpoint = "%s/jsonrpc" % server_url
headers = {"Content-Type": "application/json"}
def get_json_payload(service, method, *args):
return json.dumps({
"jsonrpc": "2.0",
"method": 'call',
"params": {
"service": service,
"method": method,
"args": args
},
"id": random.randint(0, 100000000),
})
payload = get_json_payload("common", "login", db_name, username, password)
response = requests.post(json_endpoint, data=payload, headers=headers)
user_id = response.json()['result']
search_domain=['|',['name','ilike','python'], ['name', 'ilike', 'sql']]
payload=get_json_payload('object','execute_kw',db_name,user_id,password,'library.book',
'search',[search_domain],{'limit':5})
res=requests.post(url=json_endpoing,data=payload,headers=headers).json()
payload=get_json_payload('object','execute_kw',db_name,user_id,password,
'library.book','read',
[res['result'],['name','date_release']])
res=requests.post(json_endpoing,data=payload,headers=headers).json()
payload=get_json_payload('object','execute_kw',db_name,user_id,password,
'library.book','search_read',
[search_domain,['name','date_release']],
{'limit':5})
res=requests.post(json_endpoing,data=payload,headers=headers).json()
payload=get_json_payload('object','execute_kw',db_name,user_id,password,
'library.book','create',
[create_data])
res=requests.post(json_endpoing,data=payload,headers=headers).json()
book_to_write=books_ids[0]
write_data={'name':'Book123456789'}
payload=get_json_payload('object','execute_kw',db_name,user_id,password,
'library.book','write',
[book_to_write,write_data])
res=requests.post(json_endpoing,data=payload,headers=headers).json()
book_to_unlink=books_ids[2]
payload=get_json_payload('object','execute_kw',db_name,user_id,password,
'library.book','unlink',
[book_to_unlink])
res=requests.post(json_endpoing,data=payload,headers=headers).json()
payload = get_json_payload("object", "execute_kw",
db_name, user_id, password,
'library.book', 'check_access_rights', ['create'])
res = requests.post(json_endpoint, data=payload, headers=headers).json()
payload=get_json_payload('object','execute_kw',db_name,user_id,password,
'library.book','make_available',[book_id])
res=requests.post(json_endpoing,data=payload,headers=headers).json()
OCA odoorpc
import odoorpc
server_url='http://127.0.0.1:8888'
db_name='12DB_ENTER'
username='1'
password='1'
odoo=odoorpc.ODOO('localhost',port=8888)
odoo.login(db_name,username,password)
user=odoo.env.user
print(user)
print(user.company_id.name)
print(user.email)
BookModel=odoo.env['library.book']
search_domain=['|',['name','ilike','python'],['name','ilike','信息']]
books_ids=BookModel.search(search_domain,limit=5)
for book in BookModel.browse(books_ids):
print(book.name,book.date_release)
book_id=BookModel.create({'name':'Test','state':'draft'})
book=BookModel.browse(book_id)
book.make_available()
book=BookModel.browse(book_id)
print(book.state)
'''
books_info = odoo.execute('library.book', 'search_read',
[['name', 'ilike', 'odoo']], ['name', 'date_release'])
print(books_info)
'''
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?